jni开发

此生再无相见时 提交于 2020-03-17 13:59:24

某厂面试归来,发现自己落伍了!>>>

安卓/手游逆向交流群963612891
jni开发
步骤:
1. 定义字符或者是方法,被native修饰;
2.Java -jni命令,生成被native修饰的.h文件;
3.h里面的东西赋值到.c,补充完整:添加参数、添加方法体;
配置两个mk文件
4.执行ndk命令生成so文件
5.回到Java层,加载so
6.加载保存,运行
 
jni静态注册
 
以调用C层字符串
1. 定义字符或者是方法,被native修饰;
 
2. Java -jni命令,生成被native修饰的.h文件;

 
注:要在文件src目录下 输入命令 >javah -jni 被定义的native 所在类的路径
3. h里面的东西赋值到.c,补充完整:添加参数、添加方法体;

函数名 .h文件生成
这里要结合jni.h文档看 找到方法
4. 配置两个mk文件
   加入两个文件(Android.mk   Application.mk),跟.c  .h文件放一块

 
5. 执行ndk命令生成so文件

6. 回到Java层,加载so

7. 加载保存,运行
 
 
 
Jni接口
1.看有没有返回值,有要定义变量接收  无就不用管
2.*env->  指出来  删掉后面括号
3. 把参数补充完整
 
 

 
 
动态注册
  流程跟静态差不多   要注意绑定Java和C进行绑定
typedef struct {
    const char* name; //第一个参数 name 是java 方法名;
    const char* signature; //第二个参数 signature 用于描述方法的参数与返回值,也就是java方法签名信息,
    void*       fnPtr; //第三个参数 fnPtr 是函数指针,指向 jni 函数;
} JNINativeMethod;
 
例子:JNINativeMethod nativeMethod[]{
          {“add”,”(FF)F”,(void*)addc}      
          {“add”,”(FF)F”,(void*)subc}
{“add”,”(FF)F”,(void*)mulc}
{“add”,”(FF)F”,(void*)divc}
};
RegisterNatives注册方法
//第一个 env  第二个 class   第三个  数组名  
第四个  数组个数 sizeof(JNINativeMethod)/sizeof(JNINativeMethod[0])
jint(*RegisterNatives)(JNIEnv*,jclass,const,JNINativeMethod*,jint);
 
  jint        (*GetEnv)(JavaVM*, void**, jint);//第三个版本号(return)
第二个 (void**)&env   第一个vm
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!