AndroidNDK初步之如何调用jni及.so和mk的配置
这篇和上一节一样是个旧,因需要重新编辑略作补充,所以还继续使用Eclipse,短板NDK有了足够的也是对开发而言有好处的。上一节提到使用Eclipse安装NDK环境及JNI的配置,这节将说明AndroidNDK开发中如何调用JNI生成.so文件及配置方法,还有第三方so不被删除的方法。
一、Android如何调用jni生成.so文件及Android.mk的配置
- 01
调用JNI进行NDK开发,主要是编写C/C++代码,这里注意新版本NDK中,JNI默认新建的C文件类型是.cpp的,所以要在写函数前后加上如下代码: extern "C"{ } 再extern "C"{}大括号内部写函数体,具体代码如图所示。
- 02
写完C/C++代码之后,在项目中jni文件夹的.cpp文件同级还有个Android.mk文件,它是存放jni文件配置信息的,一般由系统自动生成,但为确保正确,还是最好检查一遍,你的Android.mk大概是如图的样子。
- 03
配置好Android.mk之后Build项目就可以生成.so文件了,开始回到项目代码,建立本地接口(实际上是一个类,相对jni而言是接口),为使程序中可以调用,代码如图所示。
二、Android项目使用第三方so文件不被删除的办法
- 01
如果你的项目中用到了第三方SDK,那么就会用到一些没有源码的.so文件,这是需要在Android.mk中配置,否则当你Build项目时是不会导出第三方的.so文件的,这时可以在Android.mk最后添加如图一句代码。
- 02
然后在项目的jni文件夹在新建一个文件夹,名称随意,比如叫prebuild,在里边新建Android.mk,也就是上一步指定的路径地址,打开Android.mk编写关联第三方.so文件的语句,参考如图的方式编写。
- 03
然后还要把所需要的第三方.so文件放到prebuild文件夹下,如图所示。
- 04
这时就可以Build、执行或者导出apk项目了,但这如果需要让程序支持更多的平台,你需要在jni目录下新建Application.mk文件,并输入如图中的语句。
- 05
到以上为止,你可以将.so放到每个平台文件夹下并编译项目了,但如果控制台报了一个说APP_PLATFORM版本高于AndroidManifest.xml中的minSdkVersion,那你就在Application.mk中添加类似如图的语句即可(让二者版本相同)。
- 06
最后,如果加载了某个第三方SDK之后,build项目时只会将.so导出到arm64-v8a、armeabi、armeabi-v7a这3个平台中,mips、mips64、x86、x86_64这4个平台会报错说不识别.so文件,或者其他类似问题的话,可以选择生成自己写JNI生成的.so后,从项目删掉C库,在没有JNI的情况下,去把所有.so文件放到libs里,再进行Build、执行或导出操作,这样就没有问题了,也就是最一般的做法。