已添加android:exported仍出现Android12+清单适配报错如何解决
核心原因
你自己主清单里的Activity已经正确配置了android:exported,报错是因为项目依赖的第三方库的清单文件中,存在带intent-filter但未显式声明android:exported的组件(Activity、Service、BroadcastReceiver都可能),清单合并时触发了Android12的规则校验。
解决步骤
第一步:定位出问题的组件
打开Android Studio中你项目的主AndroidManifest.xml文件,点击编辑器底部的「Merged Manifest」标签,就能查看所有合并后的清单内容,报错的组件会被红色高亮标记,直接就能看到对应的组件全类名和所属的依赖库。
第二步:修复问题
优先选择方案一:升级对应依赖库
你项目中依赖的多个库版本过旧未适配Android12,比如2.0-alpha-3版本的LeakCanary、11.1.0版本的Facebook SDK、alpha版本的Navigation Compose、旧版Firebase相关组件等,将这些库升级到官方已适配Android12的版本即可解决问题。
如果部分依赖库已停止维护无法升级,选择方案二:手动重写组件配置
在你主清单的<application>节点下,添加对应未配置exported的组件声明,显式指定android:exported的值,同时添加tools:node="merge"属性保证配置生效,示例如下:
<!-- 先在manifest根节点添加tools命名空间,没有的话补上 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.xyz.abc"> <application ...> <!-- 重写出问题的组件,比如某个广播接收器 --> <receiver android:name="出问题的组件全类名" android:exported="false" <!-- 不需要外部应用调用就填false,需要就填true --> tools:node="merge" /> <!-- 你的其他原有配置 --> <activity android:name="com.xyz.presentation.MainActivity" android:exported="true"> ... </activity> </application> </manifest>
注意事项
Android12的exported要求覆盖所有带intent-filter的四大组件,不止是Activity,Service、BroadcastReceiver如果带intent-filter也必须显式配置该属性,不要遗漏。
内容的提问来源于stack exchange,提问作者Android Developer

