问题:什么是JNI,怎么使用?
JNI---Java Native Interface,它是Java平台的一个特性(并不是Android系统特有的)。主要是定义一些JNI函数,让开发者可以通过调用这些函数实现Java代码调用c/c++的代码,c/c++代码也可以调用Java的代码。这样就可以发挥各个语言的特点了。那么怎么使用JNI呢?一般情况下我们首先是将写好的c/c++代码编译成对应平台的动态库(windows一般是dll文件,linux一般是so文件等等),我们使用的是Android,这里只讨论so库。
1、新建一个类,声明native方法。这个类是java与c/c++交互的中介,方法由java声明,由c/c++实现。
2、打开AndroidStudio的Terminal终端控制台,使用javac编译上述文件,生成class文件。
命令:cd testjni/src/main/java/com/ying/testjni/ 先要切换到myJNI.java对应的目录
使用命令:javac myJNI.java稍等一会在相应的目录会生成对应的.class文件
3、确认自己类的包名,在最外层包的上级目录使用javah生成.h文件(注意使用javah的位置,否则会报找不到xxx的类)
例如:我的包名是com.ying.testjni,那么就要切换到com所在的目录即:cd java/ 在这个目录使用命令javah -jni com.ying.testjni.myJNI。在对应的目录会生成相应的JNI头文件。
4、在main目录下新建jni文件夹,并新建main.c文件,把刚才生成的.h里面的内容复制进去,并实现里面的方法。
5、在AndroidStudio3.0推荐使用CMake编译c++文件(CMakeLists.txt文件可以从别处拷贝,然后修改相应的cpp文件名称以及相应的位置即可)。
6、最后需要在module下的build.gradle里面配置CMakeLists.txt的路径
7、最后在MainActivity中使用就可以了。