面向Android12的应用报需显式指定android:exported错误如何解决
问题根源
你自己主Manifest中声明的MainActivity已经正确配置了android:exported属性,之所以还报错,是因为你项目依赖的第三方库中存在带android:exported的组件(Activity/Service/BroadcastReceiver/ContentProvider)
解决步骤
- 第一步:定位问题组件
打开Android Studio项目中的AndroidManifest.xml文件,点击编辑器底部的「Merged Manifest」标签,即可查看所有依赖合并后的完整Manifest文件,红色高亮标记的就是未正确配置android:exported的问题组件,记录该组件的完整类名和所属包名。 - 第二步:在主Manifest中覆盖声明
在你自己的主AndroidManifest.xml的<application>标签内,重新声明找到的问题组件,显式指定android:exported属性,同时添加tools:node="replace"覆盖依赖库中的原有声明即可,示例如下:
<!-- 示例:假设找到的问题组件是第三方库的com.xxx.otherlib.OtherActivity --> <activity android:name="com.xxx.otherlib.OtherActivity" android:exported="false" <!-- 不需要被外部应用调用就填false,需要就填true --> tools:node="replace" />
- 其他可选临时方案:如果暂时不想适配,可将模块级
build.gradle中的targetSdkVersion降到30及以下,即可绕过该校验规则,不过不建议长期使用该方案。 - 补充检查:如果后续你自己添加了带
的Service、BroadcastReceiver等其他组件,也需要为其显式声明 android:exported属性。
内容的提问来源于stack exchange,提问作者Edgar
相关产品推荐
相关产品推荐

