序
在官方文档下使用 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
目前,主流app都是选择armeabi-v7a,如qq,支付宝等等。所以,我们在打包的时候使用flutter build apk --split-per-abi
即可获得armeabi-v7a的apk release 包。
后续
除开我们打包的原因,还是有一些方法来帮助我们继续给apk瘦身。
- 图片压缩
- 开启混淆,这样不仅可以增加逆向难度,也可以减少apk大小
- 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