Flutter升级API 31后上传Google Play遇android:exported配置问题求助
解决Android 12(API 31)下Google Play上传的exported属性问题
你的MainActivity已经正确设置了android:exported="true",问题出在依赖的第三方插件的AndroidManifest.xml中——这些插件包含的Activity、Service或Broadcast Receiver带有<intent-filter>但未声明android:exported属性,合并到你的主Manifest后触发了Google Play的检测规则。
解决步骤:
查看合并后的完整Manifest
- 打开Android项目的
android/app/src/main/AndroidManifest.xml,点击编辑器底部的Merged Manifest标签,在这里可以看到所有插件合并进来的组件,找到带有<intent-filter>但缺少android:exported的条目。 - 或者通过命令行生成合并后的Manifest:
生成的文件位于./gradlew app:processReleaseManifestapp/build/intermediates/merged_manifests/release/AndroidManifest.xml,直接打开查看即可定位问题组件。
- 打开Android项目的
升级插件版本
绝大多数主流Flutter插件(比如你用到的Firebase Messaging)已经更新适配了API 31,打开pubspec.yaml,将所有依赖插件升级到最新稳定版。例如,确保firebase_messaging的版本是支持API 31的最新版,升级后插件自身的Manifest会自动添加android:exported属性。手动覆盖插件组件的exported属性
如果某些旧插件未更新,在你的主AndroidManifest.xml中,针对问题组件添加覆盖声明:- 比如某个插件的Service带有intent filter但未设exported:
<service android:name="com.example.plugin.ProblemService" android:exported="false" /> <!-- 不需要外部调用则设false,需要则设true --> - 针对Firebase相关组件,常见需要覆盖的可能是MessagingService,示例:
<service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
- 比如某个插件的Service带有intent filter但未设exported:
验证修复结果
重新构建App Bundle/APK,通过Android Studio的App Bundle Explorer打开产物,检查里面的Manifest确认所有带<intent-filter>的组件都已添加android:exported属性,再上传到Google Play测试即可。
内容的提问来源于stack exchange,提问作者Ronaldonizuka
相关产品推荐
相关产品推荐

