11.JNI开发

1. JNI介绍

JNI,java native interface ,Java本地开发接口,实现在安卓中JAVA和C语言之间的相互调用
通常高级点的app会把加密逻辑使用c做,而java层没有加密逻辑从而增加破解难度

2. 环境准备

  • AndroidStudio
  • NDK,Native Develop Kits,本地开发工具(在Android Studio中下载即可)Pasted image 20250510213620.png

创建一个新项目
Pasted image 20250510215340.png

JNI开发:Native C++

  • 创建出项目来后,会带一个java调用c的小案例
  • 一些配置帮咱们配置完成
  • 在固定位置写代码即可

Pasted image 20250510215726.png
这个SDK版本选个合适的即可-->下一步默认-->Finish

PS:如果有报错,就把清空缓存重新试试

3. JNI快速开发

第一步:在cpp目录下,新建c文件(注意选择c结尾)
Pasted image 20250510225951.png

第二步:编写Java,新建一个Java类,编写静态方法
MainActivity同级目录下创建Utils.java
Pasted image 20250510230056.png

第三步:在java类中,引入静态文件

public class utils {  
    //引入静态文件  
    static {  
        System.loadLibrary("utils");  
    }  
}

第四步:在CMakeLists.txt中加入编写的c文件

add_library(
            utils
            SHARED
            utils.c)
    target_link_libraries(
        s11day13
        utils
        ${log-lib})

第五步:在Utils.java中写JNI方法(Native方法)
5 写jni方法--Native方法--->只是声明一个接口,具体由c实现
public static native int v1(int a1,int a2);


# 5 
    
    
# 6 第六步:utils.c 具体实现java中声明的v1方法
	#include <jni.h>
    JNIEXPORT jint
    JNICALL
    Java_com_justin_s11day13_Utils_v1(JNIEnv *env, jclass clazz, jint a1, jint a2) {
        return a1+a2+100;
    }

# 7 第七步:MainActivity中
	tv.setText(String.valueOf(Utils.v1(3,4)));