Flutter发布构建appbundle体积过大,替换flutter_sound后清单冲突如何解决
问题解决指南
一、Flutter发布版包体积过大优化建议
- 首先确认构建模式为正式发布模式,执行构建命令时明确指定release参数:
flutter build appbundle --release,避免误打调试包导致体积异常 - 优先排查两个高体积风险依赖:
- jitsi_meet:音视频会议套件默认会打包全架构的so库,体积增量普遍在30MB以上,建议在gradle中配置abi过滤,仅保留业务需要的架构(如仅保留armeabi-v7a、arm64-v8a,过滤x86等不必要的架构)
- google_fonts:未配置裁剪时会默认打包全量字体资源,建议在pubspec.yaml中添加
fonts配置明确指定用到的字体,开启字体裁剪功能
- 精简Proguard规则:你当前的规则保留了Firebase全量代码,建议移除
-keep class com.google.firebase.** { *; }这行,改用Firebase官方提供的精简混淆规则,避免无用代码被保留 - 开启Dart代码裁剪混淆:执行构建时添加参数
flutter build appbundle --release --obfuscate --split-debug-info=./debug-info,主动裁剪无用Dart代码、混淆逻辑的同时压缩体积 - 拆分架构构建:如果上架Google Play,可添加
--split-per-abi参数拆分不同架构的安装包,用户仅会下载对应自己设备架构的包,体积可缩减40%以上
二、MediaButtonReceiver exported属性冲突解决方案
报错核心是awesome_notifications和flutter_sound_core两个插件对同一个系统广播接收器的exported属性配置不一致,按以下步骤处理即可:
- 首先在项目根AndroidManifest.xml的根
manifest标签中添加tools命名空间声明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的应用包名">
- 在
application标签内部,手动添加MediaButtonReceiver声明,指定tools:replace="android:exported"覆盖子插件的配置:
<application ...> <!-- 原有配置保持不变 --> <receiver android:name="androidx.media.session.MediaButtonReceiver" android:exported="false" tools:replace="android:exported" /> <!-- 原有Activity、Service等配置保持不变 --> </application>
如果业务需要flutter_sound响应媒体按钮事件,可将上述android:exported的值改为true即可
3. 执行flutter clean后重新构建即可解决冲突
内容的提问来源于stack exchange,提问作者Dev Chauhan
相关产品推荐
相关产品推荐

