如何让Ionic应用适配Android 12(Snow Cone)系统
Ionic Android12适配构建报错解决方案
根因说明
你手动修改的platforms目录下的清单文件会被构建流程自动覆盖,且仅给MainActivity加android:exported属性不全面,所有带intent filter的四大组件(Activity、Service、BroadcastReceiver)都需要显式声明该属性,包括第三方Cordova插件生成的组件。
具体解决步骤
- 第一步:升级cordova-android到适配Android12的稳定版本
你当前使用的cordova-android@10.0.0对Android12的适配存在缺陷,先卸载旧安卓平台再安装高版本:
该版本默认会自动给核心组件添加cordova platform rm android cordova platform add android@11.0.0android:exported属性,同时兼容TargetSdk31/32。 - 第二步:在config.xml中全局配置组件exported属性
不要手动修改platforms下的文件,直接在config.xml的<platform name="android">节点下添加如下配置,构建时会自动注入到清单文件中:<!-- 配置所有Activity的exported属性,主Activity设为true --> <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application/activity"> <activity android:exported="true" /> </edit-config> <!-- 配置不需要对外暴露的Service、Receiver的exported属性,有特殊需求的组件单独指定即可 --> <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application/service"> <service android:exported="false" /> </edit-config> <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application/receiver"> <receiver android:exported="false" /> </edit-config> <!-- 配套配置Gradle和构建工具版本,解决版本兼容报错 --> <preference name="android-gradleVersion" value="7.1.1" /> <preference name="android-buildToolsVersion" value="31.0.0" /> - 第三步:升级第三方插件到适配Android12的版本
报错中提到的FCMPlugin需要升级到最新版本,旧版本插件未适配Android12的清单文件规则,也未兼容高版本Gradle。 - 第四步:清理缓存重新构建
# 清理安卓构建缓存 cordova clean android # 删掉本地依赖锁文件和依赖目录后重新安装依赖 rm -rf node_modules package-lock.json npm install # 重新构建 cordova build android
注意事项
所有配置中的引号必须使用英文半角引号,不要使用中文引号,否则会出现配置识别失败的问题。
内容的提问来源于stack exchange,提问作者Sonal Saitavadekar
相关产品推荐
相关产品推荐

