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

您所在的位置:网站首页 软件包架构不匹配怎么办 关于不同cpu架构APP的兼容问题

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

2023-06-27 14:10| 来源: 网络整理| 查看: 265

问题

发现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

记录学习,仅供参考!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3