Jetpack Compose项目引入ShakeBugs后Manifest合并出现android:exported报错如何解决
报错原因
你自己项目的Manifest中已对自有组件正确配置了android:exported属性,本次报错是引入的com.shakebugs:shake:14.4.0版本未适配Android 12+规范导致的:该版本SDK内部自带的Service组件声明携带intent filter,但没有显式指定android:exported属性,触发了Manifest合并规则校验失败。
解决方案
按优先级可选以下任意方案:
- 方案1:升级Shake SDK版本
14.4.0属于较早的迭代版本,官方后续发布的版本已经完成了Android 12适配,直接将依赖版本升级到适配Android 12的最新版本即可解决问题,无需修改其他配置。 - 方案2:手动覆盖第三方SDK的Manifest配置(不想升级SDK时使用)
如果你需要保留14.4.0版本使用,可以通过Manifest合并规则覆盖SDK自带的组件配置:
- 先在你的Manifest根节点添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.uticodes.compose_otp_input_field">
- 在
<application>节点内添加Shake SDK对应Service的覆盖声明,显式指定android:exported属性:
<service android:name="com.shakebugs.shake.internal.service.ShakeDetectionService" android:exported="false" tools:node="replace"/> <service android:name="com.shakebugs.shake.internal.service.ShakeNotificationService" android:exported="false" tools:node="replace"/>
如果后续仍提示其他组件缺少android:exported属性,按照相同格式添加对应组件的覆盖声明即可,不需要对外开放的组件统一设置android:exported="false"。
- 方案3:临时降级compileSdk版本(仅做临时验证用,不推荐长期使用)
本地调试时可以暂时将compileSdk修改为30,即可绕过Android 12的android:exported强制校验规则,不建议在正式版本中使用该方案。
内容的提问来源于stack exchange,提问作者Teebeh Eteem
相关产品推荐
相关产品推荐

