安卓软件APK安装包arm64-v8a、armeabi-v7a、x86、x86_64有何区别
在GitHub网站下载Android 安装包,Actions资源下的APK文件通常有以下版本供选择:
GitHub Actions资源文件,V2RayNG安卓安装包
例如上图是V2Ray的Android客户端V2RayNG的安装包文件,有以下几个版本可以选择:
v2rayNG_1.7.8.apk(通用版本,但体积最大)
v2rayNG_1.7.8_arm64-v8a.apk(第8代64位处理器)
v2rayNG_1.7.8_armeabi-v7a.apk
v2rayNG_1.7.8_x86.apk
v2rayNG_1.7.8_x86_64.apk
一、arm64-v8a、armeabi-v7a、x86、x86_64各个版本之间,有什么区别?
V2RayNG版本号后面的信息,是Android设备的ARM处理器类型及版本,目前通常分为以下几种:
1、arm64-v8a:第8代、64位ARM处理器。目前,国内Android应用生态正在向64位架构过渡。同时,移动芯片平台也将逐步弱化对32位应用的支持。
2、armeabiv-v7a:第7代及以上的 ARM 处理器,是目前主流版本,大部分Android设备都使用它。
3、armeabi:第5代、第6代的ARM处理器,早期的手机用的比较多,缺乏对浮点数计算的硬件支持,在须要大量计算时有性能瓶颈。
4、x86 / x86_64:x86 架构的手机都会包含由 Intel 提供的称为 Houdini 的指令集动态转码工具,实现对arm .so 的兼容。考虑 x86不到1% 的市场占有率,x86 相关的两个 .so 也是可以忽略的。
5、mips/mips64:极少用于手机可忽略。
二、应该下载哪个版本的安卓安装包,arm64-v8a、armeabi-v7a、x86、x86_64?
普通手机用户,建议下载 arm64-v8a (第8代、64位ARM处理器)版本,能够发挥手机最佳性能,小编也是一直这么选择的。
怎么查看自己的手机是64位还是32位呢?只要本型号手机支持8G运行内存以上,有8G内存版本在出售,就都是64位处理器。
如果是很老的手机,也有可能不是64位处理器,那么就选择armeabi-v7a,几乎通用所有手机,而且也兼容64位处理器。
以前面图片的安卓应用V2RayNG为例,共提供了五个版本:
第一个是 v2rayNG_1.7.8.apk ,没有标明处理器版本,通常是通用版本,有的应用会写上“-universal”。下载这个版本肯定没错,所有安卓手机都兼容。但是,APK安装包文件大小是其他版本的几倍。无论从手机上网流量还是存储空间考虑,都没必要选择,忽略该版本。
最后面两个版本几乎没有手机在用了,也忽略掉。
只剩下arm64-v8a和armeabi-v7a了,这两个版本都可以在我的小米手机中正常运行,但是arm64-v8a可以覆盖armeabi-v7a安装,而后者不能覆盖前者,会提示“不能降级安装”,需要卸载arm64-v8a才能安装armeabi-v7a。
下面是一些补充
一.Android 设备的CPU类型
armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
arm64-v8a: 第8代、64位ARM处理器,当前主力设备都支持稳定性更好,三星 Galaxy、vivo、oppo等高端机型都支持,主要看cpu。
armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
x86: 平板、模拟器用得比较多。
x86_64: 64位的平板
armeabi设备只兼容armeabi,不支持硬件辅助浮点运算,支持所有的 ARM* 设备;
armeabi-v7a设备兼容armeabi-v7a、armeabi;
arm64-v8a设备兼容arm64-v8a、armeabi-v7a、armeabi;
x86设备兼容x86、armeabi;
x86_64设备兼容x86_64、x86、armeabi;
mips64设备兼容mips64、mips;
mips只兼容mips;
二.Android设备如何加载.so文件
以arm64-v8a设备为例,该Android设备优先寻找libs目录下的arm64-v8a文件夹。如果有文件夹,但是没有so库,则会报错。如果没有arm64-v8a文件夹,则会去找armeabi-v7a文件夹。如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so。
三.实际操作
由上兼容性可以看到不同设备基本都是可以兼容armeabi的so库,只是效率,性能上有问题。
反编译微信,里面只有armeabi这个文件夹,应该是在这个目录下放置其他架构的SO文件,再通过代码实现选择加载哪一个架构的SO文件。
使用armeabi的手机已经很少了,几乎忽略不计了。
为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致
对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹