You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的检测规则。

解决步骤:

  1. 查看合并后的完整Manifest

    • 打开Android项目的android/app/src/main/AndroidManifest.xml,点击编辑器底部的Merged Manifest标签,在这里可以看到所有插件合并进来的组件,找到带有<intent-filter>但缺少android:exported的条目。
    • 或者通过命令行生成合并后的Manifest:
      ./gradlew app:processReleaseManifest
      
      生成的文件位于app/build/intermediates/merged_manifests/release/AndroidManifest.xml,直接打开查看即可定位问题组件。
  2. 升级插件版本
    绝大多数主流Flutter插件(比如你用到的Firebase Messaging)已经更新适配了API 31,打开pubspec.yaml,将所有依赖插件升级到最新稳定版。例如,确保firebase_messaging的版本是支持API 31的最新版,升级后插件自身的Manifest会自动添加android:exported属性。

  3. 手动覆盖插件组件的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>
      
  4. 验证修复结果
    重新构建App Bundle/APK,通过Android Studio的App Bundle Explorer打开产物,检查里面的Manifest确认所有带<intent-filter>的组件都已添加android:exported属性,再上传到Google Play测试即可。

内容的提问来源于stack exchange,提问作者Ronaldonizuka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:01:12