我正在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()
}