Ionic6 Capacitor3 Share插件Android12(targetSdk=32)崩溃问题咨询
解决方案
需要修改AndroidManifest.xml配置解决该崩溃,崩溃本质是Android 12(API 31)针对targetSdk≥31的应用新增了两项强制系统限制,旧版本@capacitor/share未做对应适配:
- 所有
PendingIntent必须显式声明可变性标志(FLAG_MUTABLE/FLAG_IMMUTABLE),未声明时调用会直接抛出异常崩溃 - 应用默认无法查询设备上其他支持处理分享意图的应用,查询无结果时触发分享逻辑崩溃
具体修改步骤
打开android/app/src/main/AndroidManifest.xml文件,做如下调整:
- 在
<manifest>根节点下新增<queries>声明,配置分享功能需要的包可见权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="你的应用包名"> <!-- 已有其他manifest节点内容 --> <!-- 新增以下queries节点 --> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="text/plain" /> </intent> <intent> <action android:name="android.intent.action.SEND_MULTIPLE" /> <data android:mimeType="image/*" /> </intent> </queries> <application android:name=".MainApplication" <!-- 已有其他application属性 --> > <!-- 已有其他组件声明 --> </application> </manifest>
- 如果你使用的@capacitor/share版本低于4.1.0,还需要在
<application>标签上新增属性,规避PendingIntent可变性校验导致的崩溃:
<application <!-- 保留原有属性,新增下面两行 --> xmlns:tools="http://schemas.android.com/tools" tools:replace="android:mutablePendingIntentWhitelist" android:mutablePendingIntentWhitelist="*">
如果manifest根节点已经声明过tools命名空间,不需要重复在application节点添加,直接加后面两个属性即可。
后续操作
配置修改完成后,执行npx cap sync android命令把web端配置同步到原生项目,重新编译打包即可,在Android 12及以上系统设备上可正常唤起分享面板,不会再出现崩溃。
如果条件允许,建议直接把@capacitor/share升级到最新稳定版,高版本已经原生适配了Android 12的系统规则,只需要添加上述queries包可见性声明即可,不需要额外配置PendingIntent白名单。
内容的提问来源于stack exchange,提问作者Prashant Mehta
相关产品推荐
相关产品推荐

