Android ABI与应用打包

基础认识

1.armeabi-v7a: 第7代及以上的 ARM 处理器,很多手机还在使用
2.arm64-v8a: 第8代、64位ARM处理器,目前主流手机CPU架构
3.armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
4.x86: 平板、模拟器用得比较多。
5.x86_64: 64位的平板。

目前手机基本使用的都是ARM架构,X86架构平板在使用。armeabi架构是早期使用,现在基本只用考虑v7和arm64-v8a两种。
google官方文档对Android ABI架构的说明:https://developer.android.com/ndk/guides/abis?hl=zh-cn
在这里插入图片描述

指定ABI构建APK

默认情况下,Gradle(无论是通过 Android Studio 使用,还是从命令行使用)会针对所有非弃用 ABI 进行构建要限制应用支持的 ABI 集,请使用 abiFilters。例如,要仅针对 64 位 ABI 进行构建,请在 build.gradle 中设置以下配置:

android {
    defaultConfig {
        ndk {
            abiFilters 'arm64-v8a', 'x86_64'
        }
    }
}

如果需要适配多种CPU架构,建议使用分包方式或者Google推荐的App Boudle
前者直接将不同ABI的so集成到对应APK中,输出CPU架构对应的APK,例如
app-hdpiX86-release.apk:仅包含适用于 hdpi 密度和 x86 ABI 的代码和资源。
app-hdpiX86_64-release.apk:仅包含适用于 hdpi 密度和 x86_64 ABI 的代码和资源。
app-mdpiX86-release.apk:仅包含适用于 mdpi 密度和 x86 ABI 的代码和资源。
app-mdpiX86_64-release.apk:仅包含适用于 mdpi 密度和 x86_64 ABI 的代码和资源。
后者利用google play应用分发机制,先上传打包好的aab文件,google后台会将aab分割成多个apk,包括base.apk以及组合了abi、资源文件、density等属性的apk ,用户通过google play安装应用时会将这些apk进行组合后安装到设备上。另外也可以通过google提供的本地工具bundletool对aab文件进行处理获取apks文件,选取合适的进行本地安装即可,本篇不详细展开讲解。

查看手机CPU架构

可使用两个shell命令查看

adb shell getprop ro.product.cpu.abi
或者
adb shell
cat /proc/cpuinfo

在这里插入图片描述
在这里插入图片描述

ABI类型和CPU架构兼容关系

在这里插入图片描述
需要注意的是

  1. 64位设备(arm64-v8a, x86_64, mips64)能够运行32位的函数库,但是以32位模式运行,在64位平台上运行32位版本的ART和Android组件,将丢失专为64位优化过的性能(ART,webview,media等等)
  2. 当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。选择abi的顺序:会安装优先级较高的ABI目录,则其它优先级较低的ABI目录(包括其它module中的ABI目录),都无法安装。例如:在cpu是ARMv7架构的手机上,如果检测到armeabi-v7a,就会选择安装armeabi-v7a,则armeabi下的文件,都无法安装了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值