记一次flutter apk瘦身之旅

在官方文档下使用 flutter build apk之后,我生成的 apk 的体积很大,但是我记得之前我的学长同样的代码生成的apk体积却连我的一半都没有。

解决

然而,造成这样的原因其实已经在控制台console出来了。

控制台输出

就是因为我们直接使用flutter build apk造成的,它会打包成一个fat apk 通配所有的平台,而解决办法他也显示出来了。

app bundle 与 ABI 的科普

app bundle

Android App Bundle 是一种发布格式,其中包含您应用的所有经过编译的代码和资源,它会将 APK 生成及签名交由 Google Play 来完成。

Google Play 会使用 app bundle 针对每种设备配置生成并提供经过优化的 APK,因此只会下载特定设备所需的代码和资源来运行应用。不必再构建、签署和管理多个 APK 来优化对不同设备的支持,而用户也可以获得更小且更优化的下载文件包。

ABI

ABI是英文Application Binary Interface的缩写,及应用二进制接口。

不同Android设备,使用的CPU架构可能不同,因此支持不同的指令集。 CPU 与指令集的每种组合都有其自己的应用二进制界面(或 ABI),ABI非常精确地定义了应用程序的机器代码应如何在运行时与系统交互。您必须为要与您的应用程序一起使用的每种CPU架构指定一个ABI(Application Binary Interface)。

选择apk对应的ABI

在选择之前我们先简要的了解一下各个ABI

ABIs

目前,主流app都是选择armeabi-v7a,如qq,支付宝等等。所以,我们在打包的时候使用flutter build apk --split-per-abi即可获得armeabi-v7a的apk release 包。

后续

除开我们打包的原因,还是有一些方法来帮助我们继续给apk瘦身。

  1. 图片压缩
  2. 开启混淆,这样不仅可以增加逆向难度,也可以减少apk大小
  3. so优化

Thanks

https://developer.android.com/ndk/guides/abis?hl=zh-cn#sa

https://juejin.im/post/6844904148589084680#heading-3

https://juejin.im/post/6844904186446872584?utm_source=gold_browser_extension#heading-3