默认情况下,Android和Flutter打包出来的Apk都是包含了所有架构的,这样打出来的apk体积相对于单架构的apk有点大。
这时,我们就需要分别打出不同的架构包。
架构
一般来说,x86代表32位CPU,x64(或者叫x86-64)代表64位CPU。
在Android中,支持专有cpu架构也是Application Binary Interface(ABI)。
Android开发者官网文档中支持的ABI。
armeabi-v7a
此 ABI 适用于基于 32 位 ARM 的 CPU,2016年之前大部分Android手机的cpu都是此架构。
arm64-v8a
此 ABI 适用于基于 ARMv8-A 的 CPU,支持 64 位 AArch64 架构,一般从2016年开始,主流Android手机的cpu架构都是arm64的。
x86
此ABI支持X86架构,像Intel、AMD的cpu都是基于此架构。在2012-2016这段时间,为了赶上移动互联网的浪潮,Intel和Nvidia专门为Android手机和平板推出过X86架构的CPU,可惜都失败了。现在一般不需要适配此架构,除非APK需要安装在Intel平板上。
x86_64
此ABI支持x86-64位架构的CPU。同上
对于
mips
、mips64
、armeabi
这些架构来说,Android从Android Plugin for Gradle 3.1.0
(对应gradle 4.4)后不再支持,因为从NDK r17开始,不再将这些 ABI 作为支持的目标。
APK分包 Android
在模块级的build.gradle文件中,在android代码块中添加splits模块。基本配置如下。
android { ... splits { // 基于不同的abi架构配置不同的apk abi { // 必须为true,打包才会为不同的abi生成不同的apk enable true // 默认情况下,包含了所有的ABI。 // 所以使用reset()清空所有的ABI,再使用include指定我们想要生成的架构armeabi-v7a、arm-v8a reset() // 逗号分隔列表的形式指定 Gradle 应针对哪些 ABI 生成 APK。只与 reset() 结合使用,以指定确切的 ABI 列表。 include "armeabi-v7a", "arm64-v8a" // 是否生成通用的apk,也就是包含所有ABI的apk。如果设为 true,那么除了按 ABI 生成的 APK 之外,Gradle 还会生成一个通用 APK。 universalApk false } }}
Flutter
使用以下命令后,会自动生成v7a、v8a、x86-64三种架构的apk。
flutter build apk --split-per-abi
生成位置在build/app/outputs/flutter-apk/。
到此这篇关于Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)的文章就介绍到这了,更多相关Android APK(v7a、v8a、x86)内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!