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

Ionic 3基于API Level 31构建生产包失败问题求助

解决cordova-android 10.1.1搭配targetSdk 31的exported属性报错问题

问题分析

你遇到的两个报错本质是Android 12+的权限规则和cordova自动Manifest合并机制的冲突:

  1. 第一个报错是因为Android 12及以上版本要求所有带有<intent-filter>的组件(Activity、Service、Receiver)必须显式声明android:exported属性,否则无法通过编译。
  2. 第二个报错是因为你手动添加android:exported后,和cordova框架或第三方插件已经自动注入的该属性重复,导致Manifest合并失败。

具体解决步骤

  • 排查第三方插件的Manifest配置
    用cordova plugin list命令列出所有已安装插件,然后进入plugins/对应插件名/src/android目录,查看插件自带的AndroidManifest.xml:
    重点检查带有<intent-filter>的<service>、<receiver>、<activity>标签,确认是否未声明android:exported属性——大部分情况下是第三方插件未适配Android 12导致的问题。

  • 修复组件的exported属性
    两种修复方式选其一:

    1. 直接修改插件源码:给未声明android:exported的组件添加属性,规则是:
      • 主入口Activity、需要被外部应用唤起的组件设为android:exported="true"
      • 仅内部调用的服务、广播接收器设为android:exported="false"
    2. 通过cordova的config.xml注入配置(无需修改插件源码):
      在config.xml的<platform name="android">节点下添加<edit-config>标签,示例如下:
      <!-- 修复某个插件的Activity -->
      <edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:name='com.example.PluginMainActivity']" mode="merge">
          <activity android:exported="true" />
      </edit-config>
      
      <!-- 修复某个插件的Service -->
      <edit-config file="AndroidManifest.xml" target="/manifest/application/service[@android:name='com.example.PluginService']" mode="merge">
          <service android:exported="false" />
      </edit-config>
      
      注意替换示例中的组件类名为实际的插件组件名称。
  • 清理缓存重新构建
    执行以下命令确保Manifest合并生效:

    cordova clean
    cordova build android
    
  • 验证核心组件配置
    查看platforms/android/app/src/main/AndroidManifest.xml,确认主入口Activity已自动带有android:exported="true"(因为它包含LAUNCHER类型的intent-filter),如果没有,检查config.xml里的主Activity配置是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:55:19