targetSdk≥31已配置android:exported仍报编译错误如何解决
报错的核心原因是AGP 4.2.2对Android 12(API 31+)的清单规则适配不全,你自己主清单的组件虽然已经配置了android:exported,但三方依赖库引入的带intent-filter的组件(Activity、Service、BroadcastReceiver、ContentProvider)没有配置该属性,合并后整体清单不符合规则导致报错。
可行解决方案
方案1:升级AGP版本
升级Android Gradle Plugin到7.0.0及以上稳定版,该版本开始原生适配Android 12的清单校验规则,构建时会直接输出具体是哪个依赖的哪个组件缺失android:exported属性,按照提示补全即可。
方案2:无需升级AGP,手动覆写三方组件配置
如果不想调整AGP版本,可以按以下步骤处理:
- 先找到构建生成的合并后清单文件,路径一般为:
app/build/intermediates/merged_manifest/[对应构建变体]/AndroidManifest.xml - 遍历该文件,找出所有带
<intent-filter>标签但未显式声明android:exported属性的组件 - 将这些组件的声明完整复制到你项目的主
AndroidManifest.xml中,根据组件的使用场景补充android:exported属性值:对外开放的组件填true,仅应用内部使用的组件填false。主清单的配置优先级高于三方依赖的清单配置,构建合并时会自动覆盖三方的原有配置。
内容的提问来源于stack exchange,提问作者Vadym Yaroshchuk
相关产品推荐
相关产品推荐

