关于不同cpu架构APP的兼容问题

来源:互联网 发布:mysql dns反向解析 编辑:程序博客网 时间:2024/06/07 19:31

问题

发现app无法运行在某些设备上。提示“此应用与您手机不兼容”


原因

应用与手机不兼容是因为手机cpu架构问题。Android系统目前支持以下七种不同的CPU架构:ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI。(ABI 决定了二进制文件如何与系统进行交互。)这些不同的架构与我们在开发app的过程中又有什么关联呢?
不难发现架构不同的关键点就是ABI的不同,而ABI又决定了系统与二进制文件交互方式,所以我们可以联想到jni或者ndk开发。其中在使用jni开发的过程中,我们会使用到.so动态库。.so文件就是与系统交互的二进制文件。所以当我们的项目中包含.so文件时我们就应该考虑到cpu的兼容问题了。


如何做兼容

在我们的jniLibs目录下新建以下目录
这里写图片描述
每一个目录都对应一种ABI。我们需要将对应的.so库放在对应的目录下。

  • 并且在Android Gradle 插件中,可以使用如下方式对 abi 进行过滤:
android {    ...    defaultConfig {            ...        ndk {            // 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置            abiFilters 'armeabi'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'        }    }}
  • 在gradle.properties 文件中添加:
    android.useDeprecatedNdk=true

这样就可以解决兼容问题了。
但是在实际开发中我们发现.so文件都会很大。以百度地图sdk为列,如果所有平台都要兼容,我们的app会变的很大。借鉴一下QQ的做法,解压qqAPK后发现qq只有一个目录armeabi。所以我们在实际开发中也只需要兼容armeabi就可以了。(具体为啥,有待考察,可能是市面上大部分设备都是arm架构吧!)


参考连接

http://www.cnblogs.com/Bugtags2015/p/5578541.html

记录学习,仅供参考!

原创粉丝点击