JNITest
通过CMake方式生成动态库so文件
简介 Java JNI的本意是Java Native Interface(Java本地接口),它是为了方便Java调用C、C++等本地代码所封装的一层接口。通过Java JNI,用户可以调用用C、C++所编写的本地代码 NDK是Android所提供的一个工具集合,通过NDK可以在Android中更加方便地通过JNI来访问本地代码。
优势 1.提高代码的安全性。由于so库反编译比较困难,因为NDK提高了Android程序的安全性。
2.可以很方便地使用目前已有的C/C++开源库
3.便于平台间的移植。
4.提高程序在某些特定情形下的执行效率,但是并不能提升Android程序性能
注:JNI和NDK开发所用到的动态库的格式是以.so为后缀的文件,JNI和NDK主要用于底层和嵌入式开发,在Android应用层开发中使用比较少。
JNI开发流程
1.在Android Studio配置NDK环境
打开SDKManager-tools下载NDK插件,下载后到SDK Location里面检查里面的NDK路径
2.在Java中声明native方法 创建一个类,叫做JNITest.java
package com.qinkl;
public class JNITest{
static{
System.loadLibrary("jni-test");
}
public static void main(String args[]){
JNITest jniTest = new JNITest();
System.out.println(jniTest.jniGet());
jniTest.jniSet("hello world");
}
public native String jniGet();
public native void jniSet(String str);
}
可以看到上面的代码中,声明了两个native方法:get和set(String),这两个就是需要在JNI中实现的方法。在JniTest的头部有一个加载动态库的静态代码块,其中jni-test是so库的标识,so库完整的名称为libjni-test.so,这是加载so