android 添加sdk自定义jni接口

1、创建一个文件夹jni_test(自定义)
存放位置:frameworks\base\jni_test

2、在jni_test目录下创建java目录和jni目录
jin目录下放入
 *.cpp或*.c文件  
#include <jni.h>
#include <string>

extern "C" {
JNIEXPORT jint JNICALL
Java_com_test_tai_NATEST_add(JNIEnv *env, jobject thiz, jint a, jint b) {
    //这里方法名,一定要和jave目录下的NATEST类的包名 类名 方法名一一对应
   //  java/com/test/tai/NATEST.java  类中add方法
    return a + b;
}

JNIEXPORT jstring JNICALL
Java_com_test_tai_NATEST_stringFromJNI
        (JNIEnv *env, jobject thiz) {
    //这里方法名,一定要和jave目录下的NATEST类的包名 类名 方法名一一对应
   //  java/com/test/tai/NATEST.java  类中stringFromJNI方法
    const char *s = "hell_world";
    return env->NewStringUTF(s);}
}

以及相关Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES  := add_test.cpp \  (c文件名称)
LOCAL_MODULE     := libhello_test(lib+jni文件名称)
LOCAL_CFLAGS += -Wno-unused-parameter
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

3、在java/com/test/tai/目录下添加自定义的NATEST.java,作为提供给上层的调用接口。
NATEST代码如下:

package com.test.tai;
public class NATEST {
    static {
        System.loadLibrary("hello_test");
    }
    /**
     * A native method that is implemented by the 'native-lib' native library,
     * which is packaged with this application.
     */
    public static native String stringFromJNI();
    public  static native int add(int a, int b);
}
添加源码完成后就可以执行模块编译,编译结果是一个hello_test.so的库,这个库会在system/lib生成。

4、源码添加完成之后就是将jni加入Android客服端中,能够作为接口提供给每一个上层应用。 
首先在/build/core/pathmap.mk中FRAMEWORKS_BASE_SUBDIRS中停驾 自定义的文件夹名:

FRAMEWORKS_BASE_SUBDIRS := \
    $(addsuffix /java, \
                    ...省略
        jni_test \
                    ...省略
      )


然后在/device/product/common或者device\rockchip\common目录下 device.mk中添加自定义的MODULE

PRODUCT_PACKAGES += \
+          libhello_test \

5.在frameworks\base\目录下Android.bp或者Android.mk文件中添加:

java_defaults {
    name: "framework-defaults",
    installable: true,
    srcs: [
         。。。
        "jni_control/java/**/*.java",
        "jin_test/java/**/*.java"

添加完成后,进行整体编译即可。

备注:如果是8.1或者9.0版本就需要添加白名单:
添加白名单
按照 build/make/core/tasks/check_boot_jars/package_whitelist.txt  文件中其他包名格式,将自己的包名添加进去
com\.test\..*
出现报错error: unused parameter 'env' [-Werror,-Wunused-parameter]
解决办法:在Android.mk 文件中添加相应的flag,可以屏蔽掉error


LOCAL_CFLAGS += -Wno-unused-parameter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值