问题分析
当安装的App包含native libraries(一般是so文件)的时候,如果没有对应机器CPU架构的库文件,就会出现这种问题。比如,开发者编译了一个armv7平台的App,但是想要装在intel架构的设备上,就会出现这个错误。
解决方案
安装的App包含Native Libraries(一般是so文件)的时候,因为没有对应机器CPU架构的库文件,就会报出此类问题。建议在编译App时,先用NDK编译出相应的CPU架构的库文件。
步骤一:编写Application.mk
文件在jni目录下(例如,即hello-jni.c同级目录下)新建一个Application.mk
文件,在文件中添加如下代码:
APP_ABI := armeabi armeabi-v7a x86
这段话表示你可以同时生成三个处理器的so库。如果没有或不想使用Application.mk
文件,则在ndk-build参数中添加如下代码:
APP_ABI=”armeabi armeabi-v7a x86 mips”
即运行:
ndk-build APP_ABI=”armeabi armeabi-v7a x86 mips”
步骤二:生成.so共享库文件Android.mk
文件已经编写好了,现在可以用Android NDK开发包中的ndk-build脚本生成对应的.so共享库了,方法如下:
mqc@ubuntu:~/workspace/android/NDK/hello-jni$ ls
AndroidManifest.xml assets bin default.properties gen jni libs obj res src
mqc@ubuntu:~/workspace/android/NDK/hello-jni$ ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserverGdbsetup : libs/armeabi/gdb.setupInstall : libhello-jni.so => libs/armeabi/libhello-jni.so
这样,在文件夹hello-jni/libs
下生成了三个文件夹armeabi/armeabi-v7a/x86,里面已经正确的生成了libhello-jni.so
共享库了。
步骤三:在eclipse重新编译HelloJni工程,生成apkeclipse中刷新下HelloJni工程,重新编译生成apk,libhello-jni.so共享库会一起打包在apk文件内。
文档内容是否对您有帮助?