安卓逆向017之NDK开发(残缺版)

这章节本想写很多内容,但是总是有各种bug,索性写一写总结吧。

1、jni:java native interface

	作用:用于java代码和C++、c代码的交互(代码混编);

    分类使用:Jni静态注册、jni动态注册

2、静态注册

1).绑定java方法和C/C++方法的方式之一;

2).java层操作和c层操作以及整体编译

        1-定义被native修饰的方法
        2-根据java代码生成.h头文件(javah -jni 类的包名路径)
        3-编写C/C++代码,导入.h头文件,实现我们.h头文件中方法
        4-编写(配置)两个mk文件:application.mk/android.mk
        5.通过ndk-build生成so文件;
        6.java代码中加载so文件(system.loadlibrary)
        7.补充:获取so库的名称
        
                1-libs文件下去头去尾(头:lib;尾:.so);
                 2.在android.mk直接复制模块名称;

3.动态注册

1)作用:.绑定java方法和C/C++方法的方式之一

2)流程
        1-java中定义native的方法
        2-创建C++代码代码,导入头文件;
        2.1-编写(配置)两个mk文件:application.mk/android.mk
        3-JNInativeMethod:绑定java方法和C/C++的方法
        4-registerNatives(4个参数):注册java层相应的类以及方法
        5-使用jni.h中JNI_onload进行判断:注册是否成功(JIN_onload:系统调用,相当于java中的psvm:public static void main)
        6-ndk-build生成so,
        7-java代码中加载so文件(system.loadlibrary)

总结:静态注册和动态注册比较

        静态注册:
        				  1.编写不方便,jni方法名必须遵守规则且名字很长;
                          2.过程较多,效率低    
                          3.不安全,
                          
         动态注册:
         				   1.流程清晰可控
                           2.效率更高,安全
                           3.JIN_onload

NDK开发总结

关于头文件:

1.静态注册:
    创建了4个文件:.c、.h、.mk、.mk
               JNIstudy.c:#inude < .h>
                          各种代码的实现:实现java层被native修饰的方法
                 JNIstudy .h:#include <jni.h>、#include <number.h>、#include <String.h>
                  mk:配置文件;
    捋一捋这句话:在.c文件里面导入包含jni.h头文件的 JNIstudy.h头文件
            

2.动态注册    
 	创建了3个文件:.c、.mk、.mk
                    .c:#include <jni .h>
                            各种代码的实现:实现java层被native修饰的方法
                    mk:配置文件;

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/120276182