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

升级Gradle至4.2.0后单元测试出现manifestPlaceholders占位符缺失报错

问题根因

AGP 4.2.0调整了单元测试的Manifest合并逻辑,测试变体默认不会自动继承主配置defaultConfig中声明的manifestPlaceholders,因此会出现正常安装运行应用无问题、仅执行单元测试时报占位符缺失的错误。

可行解决方法

方案1:统一配置主包与测试包的占位符

将占位符提取为公共变量,同时配置给主构建配置和测试构建配置,适配库模块和应用模块:

  1. 先在android块外定义公共占位符变量:
def commonPlaceholders = [
    myPlaceholder1: "some_value_1",
    myPlaceholder2: "some_value_2"
]
  1. defaultConfig中引用该变量:
defaultConfig {
    // 其他原有配置
    manifestPlaceholders = commonPlaceholders
}
  1. 追加测试变体的占位符配置:
    如果是应用模块,添加以下配置:
android.applicationVariants.all { variant ->
    variant.testVariant?.mergedFlavor?.manifestPlaceholders?.putAll(commonPlaceholders)
}

如果是库模块,添加以下配置:

android.libraryVariants.all { variant ->
    variant.testVariant?.mergedFlavor?.manifestPlaceholders?.putAll(commonPlaceholders)
}

方案2:为单元测试单独配置Manifest

如果你的单元测试逻辑完全不需要用到Manifest中依赖占位符的属性,可以在test目录下新建自定义AndroidManifest.xml,移除需要占位符的属性,或者直接写死对应属性值,跳过占位符替换步骤。

方案3:升级AGP到7.0及以上版本

该占位符继承问题在AGP 7.0.0-alpha08及后续版本已被官方修复,测试变体可以自动继承主配置的manifestPlaceholders,如果项目可以接受升级AGP大版本,该方案可彻底解决问题。

内容的提问来源于stack exchange,提问作者Rui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:06:01