Appearance
Flutter 分包编译
--split-per-abi. 可以将API按平台编译,上传到应用市场。如果移除 --split-per-abi 将会生成一个包含 所有 目标 ABI 的 fat APK 文件。这种 APK 文件将会在比单独构建的 APK 文件尺寸要大,会导致用户下载一些不适用于其设备架构的二进制文件。
bash
flutter build apk --split-per-abi.
运行 flutter build apk --split-per-abi
(flutter build 默认带有 --release 参数。)
这个命令会生成如下三个 APK 文件
[project]/build/app/outputs/apk/release/app-armeabi-v7a-release.apk [project]/build/app/outputs/apk/release/app-arm64-v8a-release.apk [project]/build/app/outputs/apk/release/app-x86_64-release.apk
下面的内容中,我们实践如何将abi合并打包的逻辑优化,并依旧大多数用户能够运行。
优化编译
默认情况下gradle会编译所有CPU指令集,但是大多数情况下我们只需要编译一个CPU指令集,比如armv7a,arm64,x86,x86_64,等。但是现在只能设备支持的ABI在市面流通的版本,主流的都是Arm架构的CPU,所以编译时,有必要修改。 查看文件
./android/app/build.gradle
修改abiFilters,下面的代码是修改前的代码。
android{
buildTypes{
release{
ndk{
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'mips', 'mips64', 'x86', 'x86_64',
}
}
}
}
将abiFilters中的内容修改为armeabi,arm64-v8a,armv7a
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // , 'mips', 'mips64', 'x86', 'x86_64',
这样打包时,就不在支持'mips', 'mips64', 'x86', 'x86_64',的设备(其实根本没有几个这样的设备了)从而大大减少api包的大小。
使用 R8 压缩你的代码
R8 是谷歌推出的最新代码压缩器,当你打包 release 版本的 APK 或者 AAB 时会默认开启。要关闭 R8,请运行 flutter build apk 或 flutter build appbundle 时加上 --no-shrink 参数。