目的:
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 ./bin
4 用javah -jni命令,根据class字节码文件生成.h头文件(-jni参数是可选的)
javah -jni -classpath ./bin -d ./jni com.study.jnitest.HelloJni
5 生成得到 h

最低0.47元/天 解锁文章
949

被折叠的 条评论
为什么被折叠?



