Android-NDK开发中JNI动态注册

本文详细介绍了在Android NDK开发中如何进行JNI动态注册,包括创建JAVA类声明native方法,新建C文件,使用javah生成头文件,拷贝到C文件,配置CMakelist.txt,最后在代码中调用动态注册的方法。
摘要由CSDN通过智能技术生成

Android-NDK开发中JNI动态注册

分析静态注册:

1.静态注册的时候,一个JAVA层方法(native声明的方法)会对应的一个固定的JNI层的函数(固定格式名称的签名函数)
	固定格式名称的签名函数:Java_com_confused_testjni_dynamic_add
	Java_包名_类名_方法名 (说白了就是路径java/com.confused.testjni/dynamic.add中间每个单词之间用'_'分割,
	碰到单词里有'_'的改成	用'_1'分割)
2.JVM 是通过这个固定格式的名称才能来定位这个JNI层的函数,从而实现JAVA中native声明的方法.
	在这个过程中  JNI层的签名函数 --> JAVA中native声明的方法   这两者中间通过某种固定格式的函数命名规则形成了对应关系
	但是这种对应关系的弊端是,只能按照JNI规定好的命名规则,才能实现JAVA层方法和JNI层方法的一一对应.
3.当我们想要更加灵活地完成这种对应关系的注册,就需要考虑用动态注册了
4.动态注册简单来说就是,将上述静态注册的过程变得灵活可控(我们自己来规定这个函数命名规则),但同时也能够实现其中的对应关系

如何实现动态注册:

1.找到项目包(com.confused.testjin)
2.在项目包里新建一个JAVA类(Dynamic)
3.在这个类中声明native方法(dynamic_add(int v1,int v2): 需要调用JNI层实现的方法)

在这里插入图片描述

4.找到main文件夹里边的cpp文件夹
5.在这个文件夹里新建一个.c文件,文件名随意(最好能起到见名知意的效果)
6.回到刚才新建的JAVA类中,新增上静态加载代码块

在这里插入图片描述

7.在terminal里打开java这个文件夹

在这里插入图片描述

8.利用javah 命令生成对应的头文件(.h后缀)
 在terminal中输入 Javah 包名.类名 例如: javah com.confused.testjin.Dynamic 然后回车运行,得到一个头文件.

在这里插入图片描述

9.将头文件中的全部内容拷贝到刚才在cpp文件夹中创建的.c文件中去

在这里插入图片描述

10.配置CMakelist.txt文件

在这里插入图片描述

注意:
	1.add_libarary()中第一个.c文件名不带后缀,第二个带后缀名;
	2.target_link_libraries()中的.c文件也不带后缀名;
11.开始编写.c文件
1.首先删除掉自动生成的静态注册用的代码

在这里插入图片描述

2.编写JNI层的方法(JAVA层native声明的那个方法想实现的逻辑都在这个函数里)

jint add(JNIEnv *jniEnv,jobject jobject1,jint jint1,jint jint2){
   
    return jint1 + jint2;
};
//注意:一个JAVA层native声明的方法,对应这样一个JNI层的方法
/* add()方法参数解释:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值