Android编译CPU架构体系不同引起的错误解决方法


转至http://blog.csdn.net/canjianfantasy/article/details/8563643


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结构不支持的原因!

于是在网上搜了下,找到了相关的文章,虽然没有直接解决问题,但是给了我一个灵感。
其实很简单,就是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!!




猜你喜欢

转载自dengzhangtao.iteye.com/blog/1850017
今日推荐