PackageManager( 5691): Native ABI mismatch from package file W/PackageManager( 5691): Package couldn't be installed in XXXX.apk
提示工程生成的apk文件安装失败
最近在做Android多媒体开发,涉及到ffmpeg和live555的移植,在手机上运行什么问题都没有,在虚拟中修改后测试一直出现各种问题,把catlog生成的日志分析一下,
结果是CPU结构不支持的原因!
armeabi和armeabi-v7a
在我们android APK的根目录有一个 libs文件夹,此文件夹下包含了armeabi 和armeabi-v7a两个文件夹,我们的c代码编译成的本地库(各种.so)就会放在这两个文件夹其中的一个。那armeabi-v7a 与 armeabi有什么区别,都是什么意思呢?
armeabi和armeabi-v7a是表示cpu的类型,我们知道一般的手机或平板都是用arm的cpu,不同的cpu的特性不一样,armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。高级版本的Android SDK还可以支持Intel X86 Atom,MIPS ,等各种CPU架构,难怪有人把以前的计算器都刷成Android 系统了!!!在下佩服!
在android.mk里可配置以下宏:
TARGET_CPU_API := armeabi 或者armeabi-v7a ...
APP_ABI := armeabi或者armeabi-v7a ...
当你编译时出现一些链接动态库的undefine错误,或你的apk运行时出现装载.so动态库错误时,不妨看一下你的Android模拟器的cpu类型的配置是否有误。
修改这个错误也很简单,你可以修改你的Android模拟器的配置,也可以修改你的Android工程的AndroidManifest.xml,一般修改 <uses-sdk android:minSdkVersion="8" />
这个就可以了!!!因为高版本的SDK 支持的CPU架构更多更高级,一般可以兼容低架构的CPU!!