INSTALL_FAILED_NO_MATCHING_ABIS

问题分析

当安装的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文件内。