安卓的串口通信及涉及到一些底层数据交互时经常会使用NDK开发。假设你正在做的项目中需要引用一个第三方的C库文件(.so动态库文件),首先判断这个C库是否符合android中规范的JNI标准。
1.如果符合JNI标准,我们就不需要另外写jni文件,而是直接导入库文件(创建jniLibs文件夹,创建不同的平台,将库文件放入),如下:
然后在应用层加载这个库并调用其中的方法即可,调用的方法必须先用native定义,如下:
2.如果你拿到的C库不是一个符合JNI标准的,那么就需要再写一个JNI文件封装一层。首先我们要正确引入这个库文件(这里用.so动态库文件),在main目录下创建命名为jni的文件夹,将.so库文件放入:
将C库的头文件放在jni文件夹下,或者创建一个include文件夹,将头文件放入,两者的差别是在.mk文件中配置的路径不同而已。在jni目录下创建Android.mk文件,并在该文件中进行配置:
4、5、6行是第三方库文件的文件名称位置等信息,11、12行是封装成jni文件后生成的库名称,13、14行是在封装过程中涉及到的源文件,15行为说明引用具体的第三方库。
在module的build.Gradle文件中android下配置:
externalNativeBuild { ndkBuild { path "src/main/jni/Android.mk" } }
在defaultConfig中添加生成的库平台:
ndk { abiFilters "armeabi","armeabi-v7a" }