整个JNI流程
配置CmkList.txt
编写cpp
编译.so
新建LibMoudle
Gradle配置 Task
执行gradle/other/makeJar
生成aar 提供三方使用
三方Module项目测试
依赖LibMoudle
实现调用
JNI 层赋值到Java 层
通过对应的Get方法将指针地址读取出来
object *p = Get
通过该指针 *p 得到需要创建对应的 object b Java函数对象所需的 内存容量
释放该指针对象 ReleaseXXXArrayElements
通过SetObjectArrayElement 赋值
返回创建的对象 b
相关逻辑构造
android 加载库方式
静态加载
动态加载 自动激发 JNI_OnLoad()方法读取_JavaVM
总java外静态接口 1
4 初始化Java类方法回调
实现功能cpp/h 2
.h文件基本操作
继承
公共类属性定义(区分)
公共属性
公共方法
5 使用单独的静态java回调接口回传
单独的java静态回调方法 3
注意cpp反射的类型 常见java类都需要在前边加j
回传类反射读取java对应的类
object = instance
javaVm反射重置 object对象
jcalss = GetObjectClass
jcalss -> GetMethodID (构造方法id,及传参 详情可查看列表)
使用虚拟机对象 jnv 调用 CallVoidMethod 调动java对象
拿取对应类的方法和所需传参(构造方法 id)
数据类型处理 ---> 类型转换
通过构造的方法id 调用方法回传到java层
JNI相关简化操作
注意事项"
参数构造不需要修饰词进行修饰
JNI 反射调用 Java方法流程(以下如果不注明前边调用的对象都是使用上一个对象)
... 代表参数
jniEnv -> NesGlobalRef(object)
-> GetObjectClass(object)
-> GetMethodID(jlz,"类里边的方法名","(...)V")
-> CallVoidMethod(object,mothedId,...,)
-> DelectLocalRef(...)