Define buildConfigField for androidTest



我正在BuildConfig中定义一个特定字段,用于在运行时获取URL。因此,对于每种构建类型,我都使用不同的字符串:

    prod {
        buildConfigField "String", "BASE_URL", ""abc.com""
    }
    debug {
        buildConfigField "String", "BASE_URL", ""efg.com""
    }

在运行android测试时,是否可以定义不同的URL?我尝试将此设置置于sourceSets->androidTest下,但未被接受。

您必须将其作为参数传递给connectedAndroidTest任务。

android {
    ...
    buildTypes {
        prod {
            buildConfigField "String", "BASE_URL", ""${getBaseUrl("abc.com")}""
        }
        debug {
            buildConfigField "String", "BASE_URL", ""${getBaseUrl("efg.com")}""
        }
    }
}
def getBaseUrl(String fallback) {
    return project.hasProperty("base_url") ? project.getProperties().get("base_url") : fallback
}

然后通过-P:传递参数

./gradlew connectedDebugAndroidTest -Pbase_url="xxx.com"
./gradlew connectedProdAndroidTest  -Pbase_url="yyy.com"

在test/androidTest目录中将自定义BuildConfig.java添加到your.app.package

安卓工作室将其标记为红色,但有效。

对于任何需要的人,使用此函数检查测试构建

boolean isUnitTestBuild() {
    Gradle gradle = getGradle()
    String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
    Pattern pattern = Pattern.compile("test(\w*)(Release|Debug)")
    Matcher matcher = pattern.matcher(tskReqStr)
    return matcher.find()
}

最新更新