Android 12+ Manifest合并报错:已配置android:exported仍出错?
问题根源
你自己的Manifest文件里,带<intent-filter>的Splash和WebViewActivity已经正确添加了android:exported="true",但报错的原因是第三方依赖库中的组件(比如AdMob或其他SDK)在其Manifest中声明了带intent filter的组件,但未指定android:exported属性,这些组件在Manifest合并后会触发Android 12+的强制要求。
解决步骤
查看合并后的完整Manifest
在Android Studio中,通过以下路径查看最终合并的Manifest:Tools > App Links Assistant > Open Merged Manifest
或者去项目的build/outputs/logs目录下找到manifest-merger-<variant>-report.txt文件,搜索android:exported,定位所有未显式设置该属性且带有intent filter的组件。覆盖第三方组件的属性
在你自己的AndroidManifest.xml中,重新声明这些第三方组件,显式添加android:exported属性(值设为true或false,根据组件是否需要被外部应用调用决定),并使用tools属性确保合并时生效:- 若仅补充缺失属性,用
tools:node="merge" - 若需替换原有属性,用
tools:replace="android:exported"
示例:假设合并后发现AdMob的某个广播接收器未设置
android:exported,可添加如下代码到你的Manifest中:<receiver android:name="com.google.android.gms.ads.AdvertisingIdClient$AdvertisingIdReceiver" android:exported="false" tools:replace="android:exported" />- 若仅补充缺失属性,用
更新依赖库版本
尽量将所有第三方依赖库更新到支持Android 12及以上的版本,大部分主流SDK已经修复了android:exported的缺失问题,更新后可能无需手动覆盖属性。
额外说明
你Manifest中的NoInternetConnectionActivity和AppIntroActivity没有设置<intent-filter>,因此不需要添加android:exported属性(默认值为false,符合Android 12+的要求),无需修改。
内容的提问来源于stack exchange,提问作者Sheikh mukhtar

