为androidTest定义buildConfigField

12

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

    prod {
        buildConfigField "String", "BASE_URL", "\"abc.com\""
    }

    debug {
        buildConfigField "String", "BASE_URL", "\"efg.com\""
    }

在运行Android测试时,是否可以定义不同的URL?我尝试将此设置放在sourceSets->androidTest下,但被拒绝了。

是否可以在运行Android测试时定义不同的URL?我尝试将这个设置放在sourceSets->androidTest下,但是没有被接受。

3个回答

4

你需要将其作为参数传递给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"

好的解决方案,谢谢。该函数可以简化为返回project.getOrDefault().get("base_url", fallback)。 - Emanuel Moecklin

0

在 test/androidTest 目录下添加自定义的 BuildConfig.javayour.app.package 中。

Android Studio 会将其标记为红色,但仍然可以正常工作。


0

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

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()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接