Flutter项目引入Firebase插件后打包APK体积大幅上涨怎么解决?
APK体积暴涨的核心原因
- 你使用的2021年中发布的Firebase系列插件版本,默认引入的Firebase Android BOM会携带大量未裁剪的传递依赖:比如
cloud_firestore: ^2.5.1默认捆绑了Firestore的全量JNI库、Firebase Installations SDK、Firebase Common SDK等多个未按需引入的原生模块,仅这部分就会带来至少7MB的体积增量。 - 第三方登录插件的冗余依赖:
flutter_facebook_auth: ^3.5.1默认引入了完整的Facebook Login SDK(约3MB),google_sign_in: ^5.0.4默认引入的Play Services Auth模块没有做缩编,额外带来2MB左右的体积增量。 - 构建配置变更:如果期间升级过Flutter SDK、Android Gradle Plugin版本,可能默认关闭了原生代码的R8全量缩编、资源压缩,或者默认开启了调试符号的打包,都会导致体积大幅上升。
- 资源未被压缩:旧版本Firebase插件会携带大量多语言翻译资源、drawable资源,默认没有被Android的资源收缩功能清理。
可行解决方案(保留所有插件的前提下)
- 开启Android端全量缩编与资源压缩:修改
android/app/build.gradle文件的release构建配置:
同时在buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }proguard-rules.pro里添加Firebase、Facebook、Google登录相关的混淆规则,避免运行时崩溃。 - 手动排除Firebase传递依赖的冗余模块:修改
android/app/build.gradle的dependencies块,排除不需要的Firebase模块:dependencies { implementation platform('com.google.firebase:firebase-bom:28.4.1') implementation('com.google.firebase:firebase-firestore') { exclude group: 'com.google.firebase', module: 'firebase-installations-interop' exclude group: 'com.google.android.gms', module: 'play-services-basement' } // 其他依赖按需排除冗余传递项 } - 开启Native库的strip配置:在
android/app/build.gradle的android块中添加:
自动剥离原生库中的调试符号,单架构APK可以减少3-5MB体积。packagingOptions { doNotStrip '*/armeabi-v7a/*.so' doNotStrip '*/arm64-v8a/*.so' doNotStrip '*/x86_64/*.so' } ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64' } - 开启R8全模式裁剪冗余代码:在
android/gradle.properties中添加:
可以自动裁剪Facebook、Google登录SDK中未使用的代码,最多可以减少4MB左右的体积。android.enableR8.fullMode=true - 移除未使用的多语言资源:在
android/app/build.gradle的defaultConfig块中指定你需要的语言资源,避免打包Firebase插件携带的几十种多语言资源:
这一步可以减少1-2MB的体积。defaultConfig { // 其他配置不变 resConfigs "zh", "en" // 按需保留你需要的语言 }
注意:所有配置修改完成后,需要先执行
flutter clean清理项目缓存,再重新执行flutter build apk --split-per-abi构建,即可将单架构APK体积压缩到10MB以内。
内容的提问来源于stack exchange,提问作者Nithin Sai
相关产品推荐
相关产品推荐

