安卓逆向02之NDK(静态注册&动态注册)

安卓逆向02之NDK(静态注册&动态注册)

JNI

JNI: Java native interface
作用:		用于Java代码和c、c++进行交互(代码混编)
分类使用:	jni动态注册和静态注册

jni静态注册

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直接复制模块名称;

动态注册

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:配置文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值