适配Android12+遇Manifest合并失败 无<service>却报android:exported错误
报错根本原因
你项目依赖的第三方AAR/SDK内部的AndroidManifest.xml中包含了带intent-filter的<service>节点,且这些库没有针对Android12+适配添加android:exported属性。Manifest合并过程中会把所有依赖库的Manifest节点合并到最终的Manifest文件里,因此触发了编译报错。
你自己项目里的Manifest找不到对应节点、合并Manifest标签页没有显式报错,是因为部分低版本Android Studio的合并Manifest可视化面板不会主动提示未配置exported属性的第三方库组件。
排查解决步骤
- 首先导出完整的合并后Manifest文件定位异常组件
你可以在项目的app/build/intermediates/merged_manifest目录下找到对应构建变体的最终合并后AndroidManifest.xml,全局搜索<service标签,找到所有带<intent-filter>且没有配置android:exported的节点,记录对应的全类名。 - 然后在主项目的AndroidManifest.xml中覆写该组件配置
对找到的异常<service>节点,在主Manifest中声明相同的全类名,手动添加android:exported属性,同时添加tools:replace="android:exported"确保你的配置会覆盖三方库的原有配置,示例代码如下:
注意:只有该Service需要对外暴露给其他应用调用时,才设置<service android:name="com.xxx.xxx.三方库对应的Service类名" android:exported="false" tools:replace="android:exported"> <!-- 原有的intent-filter配置可以直接保留 --> <intent-filter> <action android:name="xxx.xxx.xxx"/> </intent-filter> </service>android:exported="true",绝大多数业务场景下设置为false即可 - 如果完成上述操作后仍有报错,可以排查项目gradle依赖列表中的老旧三方库,将其升级到适配Android12+的版本,也可以直接解决问题。
内容的提问来源于stack exchange,提问作者iDecode
相关产品推荐
相关产品推荐

