Android 12+编译报错:需为测试Activity显式指定android:exported
解决Android 12+测试组件缺少
android:exported属性的编译错误 问题原因
报错的InstrumentationActivityInvoker$BootstrapActivity等Activity,是由你的测试依赖库(如fragment-testing、androidx.test.core)自动合并到Manifest中的,但这些组件未显式声明android:exported属性。由于你的应用targetSdk设为32(Android 12及以上),系统强制要求所有带有intent filter的组件必须明确指定该属性。
解决方案
方案1:升级测试依赖库版本(推荐)
旧版本测试库未适配Android 12的android:exported要求,升级到兼容版本可自动修复问题:
- 将
fragment_version从1.3.0-alpha07升级至1.4.0及以上稳定版本(例如1.6.1) - 同步升级
activity_version到对应兼容版本(例如1.7.2)
修改build.gradle中的版本配置:
ext{ fragment_version = "1.6.1" activity_version = "1.7.2" }
同步Gradle后,新版本测试库会自动为这些Activity添加合规的android:exported属性。
方案2:在Manifest中显式声明测试组件(临时方案)
若暂时无法升级依赖,可在AndroidManifest.xml中通过tools:node="merge"显式添加这些组件并指定属性:
<application> <!-- 保留你已有的组件配置 --> <!-- 补充测试库Activity的android:exported声明 --> <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$BootstrapActivity" android:exported="false" tools:node="merge" /> <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity" android:exported="false" tools:node="merge" /> <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity" android:exported="false" tools:node="merge" /> </application>
tools:node="merge"会让系统将该声明与库中自动合并的内容整合,覆盖缺失的属性。
额外优化建议
建议将compileSdk版本升级至与targetSdk一致(当前targetSdk为32,compileSdk为30),避免版本不兼容问题:
android { compileSdk 34 // ... defaultConfig { targetSdk 34 // ... } }
内容的提问来源于stack exchange,提问作者Alex97
相关产品推荐
相关产品推荐

