Flutter中build与release的区别及APK包大小差异咨询
Flutter Build与Release的区别及APK体积优化
一、Build(构建)与Release(发布)的区别
- Build(构建):是个宽泛的概念,指把Flutter代码转成可执行文件的全过程,包含三种常用模式:
- Debug模式:带完整调试信息,支持热重载/热重启,性能拉胯,纯给开发调试用
- Profile模式:介于Debug和Release之间,保留部分调试工具,用来做性能分析
- Release模式:专门给生产环境准备的构建模式,代码会被深度优化(混淆、剔除无用代码),删掉所有调试信息,性能拉满
- Release(发布):其实是Build过程里的一种特定模式,属于Build的子集,目标就是生成最小、最快、最安全的应用包,用来正式发布到应用商店
二、两个Release命令生成APK体积差异的原因
flutter run --release生成的是拆分版APK,而flutter build apk --release默认生成的是通用APK:
- 通用APK会把arm64-v8a、armeabi-v7a、x86_64等所有CPU架构的原生库都打包进去,自然体积大
flutter run --release在安装时,只会给当前设备推送对应架构的单个拆分APK,你看到的体积是单架构的,所以比通用APK小近一半
三、精简应用包体积的实用方法
- 优先生成App Bundle:执行
flutter build appbundle --release,Google Play会自动给不同设备推对应架构的拆分包,用户实际下载的体积会大幅降低 - 确认开启代码优化:Flutter Release模式默认已经开启R8混淆和Tree Shaking,也可以去
android/app/build.gradle里检查是否配置了minifyEnabled true和shrinkResources true - 压缩资源文件:
- 图片换成WebP格式,用工具压缩后再导入项目
- 删掉项目里没用到的图片、字体等资源
- 拆分架构APK:如果一定要生成APK,执行
flutter build apk --release --split-per-abi,会生成对应不同架构的单独APK,每个体积都很小 - 清理冗余依赖:检查
pubspec.yaml,删掉没用到的第三方包 - 关闭不必要的特性:比如不需要多语言支持,就把相关配置删掉,能省不少体积
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

