升级API至31后构建应用发布版本遇Manifest合并错误求助
解决API 31升级后Manifest合并失败(已配置android:exported仍报错)
排查所有带
的组件,包括第三方依赖的
自己写的Activity、Service、BroadcastReceiver、ContentProvider只要配了,都得加android:exported,但很多时候问题出在第三方库——比如旧版本的推送、统计SDK里的组件没适配API 31。你可以通过两种方式排查: - 执行命令:
./gradlew app:processDebugManifest --stacktrace,输出里会明确指出哪个组件没加exported - 打开Android Studio的
Merged Manifest标签(在Manifest编辑页底部),直接查看合并后的完整Manifest,找那些带却没有android:exported属性的组件
- 执行命令:
确认android:exported的取值正确
不是随便加个true/false就行,得根据组件用途来:- 主Activity(带
android.intent.action.MAIN和android.intent.category.LAUNCHER的intent-filter)必须设为android:exported="true",否则应用图标都出不来 - 仅内部调用的组件(比如私有Service)设为
android:exported="false"
另外检查拼写,别把android:exported写成export或者大小写错了
- 主Activity(带
覆盖第三方库组件的缺失属性
如果是第三方库的组件没加exported,直接在自己的Manifest里覆盖该组件的属性就行,比如:<activity android:name="com.thirdparty.sdk.SomeActivity" android:exported="false" tools:node="merge" />这里
tools:node="merge"是告诉Gradle合并你添加的属性和原组件的属性,避免覆盖其他配置清理缓存后重新构建
有时候Gradle缓存会导致Manifest合并逻辑异常,先执行./gradlew clean,然后重启Android Studio,再重新构建项目
内容的提问来源于stack exchange,提问作者Amr Farghaly
相关产品推荐
相关产品推荐

