android framework添加新模块

背景

为framework添加一个新的模块 可以通过framework层调用native层,并为第三方提供调用方式

实现

1. framework部分

1). 在framework/base 下新添加一个文件夹demo

新建java/com/test/DemoManager.java

package com.test;


public class DemoManager {
    public static native void sayHelloNative();

    static{
        System.loadLibrary("demojni");
    }
}

DemoManager 为应用层提供相关API,如 sayHelloNative(),这里是直接调用了JNI的native方法。值得注意的是DemoManager加载了中的System.loadLibrary(“demojni”)加载了下一步生成的libdemojni.so文件。

2). 修改build/core/pathmap.mk

#
# A list of all source roots under frameworks/base, which will be
# built into the android.jar.
#
FRAMEWORKS_BASE_SUBDIRS := \
	$(addsuffix /java, \
	    core \
	    graphics \
	    location \
	    media \
	    media/mca/effect \
	    media/mca/filterfw \
	    media/mca/filterpacks \
	    drm \
	    opengl \
	    sax \
	    telecomm \
	    telephony \
	    wifi \
	    keystore \
	    rs \
+++	    demo \
	 )

3). 根据项目实际情况添加以下内容到系统

PRODUCT_PACKAGES += libdemojni

2. JNI部分

1). 新建 jni/com_test_DemoManager.c

#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
#include <android/log.h>
#define TAG    "demonative"
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,TAG,__VA_ARGS__)

jobject
Java_com_test_DemoManager_sayHelloNative( JNIEnv* env,jobject thiz,jstring alg)
{
LOGD("DemoManager_sayHelloNative");

return (*env)->CallStaticObjectMethod(env, cls, tmfCb,alg);
}

}

2).新建 jni/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES  := com_test_DemoManager.c
LOCAL_MODULE     := libdemojni

LOCAL_LDLIBS := -lm -llog

LOCAL_SHARED_LIBRARIES := liblog libcutils

include $(BUILD_SHARED_LIBRARY)

3. 应用层调用API

1). 将第一步的DemoManager.java生成一个jar包或者aar包供应用层调用

2). 应用层项目加载jar/aar

3). 使用

package com.android.demoooo;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DemoManager.sayHelloNative();
    }
}

参考出处 https://blog.csdn.net/liwendovo/article/details/8010616

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值