目的:
1 安全性-将一些复杂的逻辑和算法通过本地代码(C或C++)来实现,然后打包成so动态库文件,并提供Java接口供应用层调用,没那么容易被破解。 相对反编译Java的class字节码文件来说
2 复用性-复用过去写过的一些 用c 或者 c++写的so 或者合作方只提供c接口。
复用以前用C/C++写的大量代码。
启程:
JNI全称是Java Native Interface(Java本地接口)
JNI是JVM规范中的一部份,因此有跨平台性,但是jni调用的so却不是在jvm内运行
so,我们要编译出对应平台的动态库,才能有多平台性。
下面对在 终端进行 so的编写和编译 调入到Android studio。
1 编写的java 文件在 as中。
package com.study.jnitest;
public class HelloJni {
static {
System.loadLibrary("JNItestd");
}
public static native String sayHello(String name);
public static String say() {
return sayHello("jojo");
}
}
。
2 提取出 HelloJni所在 目录。
保持 src/com/study/jnitest/HelloJni.java
的目录结构。
3 用javac命令将.java源文件编译成.class字节码文件
javac src/com/study/jnitest/HelloJni.java -d ./bi