在应用层加载so的时候,虚拟机首先回去/自动执行JNI_OnLoad(…),
传统java Jni方式:
1.编写带有native方法的Java类
2.使用javah命令生成.h头文件
3.编写代码实现头文件中的方法
但是上述每次都需要通过javah依据java类的全类名生成对应的native函数全名称,其实我们可以使用RegisterNatives方法把c/c++中的方法隐射到Java中的native方法
使用JNI_OnLoad步骤
在c/c++文件中定义并实现对应java中声明的本地方法,方法名称随意,但是参数类型和参数个数必须一样
创建声明JNINativeMethod类型的数组,值为需要动态加载映射的本地方法
实现JNI_OnLoad方法,主要分为下面两步:
通过FindClass获取所需的映射的java类
通过jint RegisterNatives(jclass clazz, const JNINativeMethod* methods, jint nMethods) 方法动态注册
JNI_OnLoad案例
1.创建JniOnloadTest.java 即定义的native方法,用来供java层调用
package com.jni.test;
/**
- Created by liuhang on 18-7-22.
*/
public class JniOnloadTest {
public native int javaAdd(int x, int y);
public native String javaSayHi();
static {
System.loa