旧Flutter 1.22.6项目上传App Bundle至Google Play遇android:exported报错
问题原因及解决方案
你的问题并非出自自己编写的AndroidManifest.xml,而是第三方Flutter插件的清单配置——这些插件自带的AndroidManifest.xml中,可能包含带intent-filter的Activity、Service或Broadcast Receiver,但没有设置android:exported属性。Flutter 1.22.6是2020年的旧版本,当时的插件生态还未适配Android 12(targetSDK 31)的强制要求,导致合并后的最终Manifest里出现不符合要求的组件,触发Google Play的报错。
排查步骤
- 查看合并后的完整Manifest:
- 用Android Studio打开项目的
android目录,执行Build > Analyze APK,选择你生成的App Bundle(.aab文件),找到base/manifest/AndroidManifest.xml,这里会显示所有合并后的组件(包括插件带来的)。 - 或者在终端执行命令:
之后查看# macOS/Linux ./gradlew app:mergeDebugAndroidManifest # Windows gradlew.bat app:mergeDebugAndroidManifestapp/build/intermediates/merged_manifests/debug/AndroidManifest.xml文件,找到所有带intent-filter但缺失android:exported的组件。
- 用Android Studio打开项目的
解决方法
1. 升级第三方插件
优先检查你使用的插件(比如UCrop相关插件、定位插件等)是否有适配Android 12的新版本,升级到最新版后,插件一般会自动补上android:exported属性。
2. 手动覆盖插件的组件配置
如果插件没有新版本,在你的主AndroidManifest.xml中重新声明有问题的组件,显式添加android:exported属性。比如某个插件的Service不符合要求,可添加:
<service android:name="com.example.plugin.SomeProblemService" android:exported="false" /> <!-- 根据组件用途设置true/false:允许外部调用则设为true,否则false -->
3. 升级Flutter版本
Flutter 1.22.6过于老旧,后续版本(如2.10及以上)已经对Android 12的适配做了全面优化,插件生态也更完善,能从根源减少这类兼容性问题。不过升级Flutter需要注意处理null safety、API变更等兼容性问题,建议先做好代码备份。
内容的提问来源于stack exchange,提问作者Promina Test
相关产品推荐
相关产品推荐

