因为项目需要,所以进行了JNI的学习。今天终于调通了一个接口,也收获了除技术之外的东西。
现在是用的另外一台电脑,没有代码,所以代码明天补上。下面就写一下今天的成果吧
一、什么是JNI
JNI:Java Native Interface,通俗来说,就是通过JNI,实现Java对C语言的库(so或者dll)的调用。一般在一个APP项目中,由于要考虑到IPhone版和Android版的一些功能的通用,所以有些功能可以用C开发,只开发一次,两种平台通用。我们就是这种情况下才进行JNI的使用
使用JNI的时候,有一个很不方便的地方,就是数据类型不同。举个例子,C有指针,Java没有,Java没有unsigned byte,C有。所以JNI最繁的地方就是进行类型转换。
二、用JNI进行调用的步骤
1、在Java中定义一个类TestClass,用来封装C接口方法的类。
2、将这个类进行编译生成TestClass.class
3、在命令行中找到TestClass.class的包目录的外层运行javah -jni com.test.jni.TestClass生成对应的.h文件,注意此处要写上这个类的完整包名和类名。
4、定义一个C文件,实现.h文件中声明的方法
5、在每个方法中,可能会调用到C语言库中的函数,在调用的时候,注意一定要进行类型转换(这一步在我看类是最繁琐的一步)
6、在Google的官网下载NDK,NDK包里面会有一些简单的Samples,如果想自己摸索,可以看看这些samples,在此基础上进行模仿,我就是用hello-jni这个工程进行编译和模仿的,效果还是不错的
7、通过ndk-build编译生成.so文件(编译的时候,要把自己生成的.c文件和需要调用到的c的库文件在一起打包)
8、将打包好的.so文件放到lib目录下
9、通过实例化TestClass,调用在这个类里声明的方法,达到调用c库的目的。
此文为原创,如有引用,注明出处