You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:05:34