Skip to content

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 参数。

仅用于培训和测试,通过使用本站代码内容随之而来的风险与本站无关。版权所有,未经授权请勿转载,保留一切权利。
ICP备案号:滇ICP备15009214号-13   公安网备:滇公网安备 53312302000061号