我在我开发的应用程序的build.gradle中配置了一个常量。它是API调用的“端点”常量。当我在开发环境中开发时,应用程序调用一个“终结点”,当我在生产环境中开发时,应用程序调用另一个“终结点”。现在出现了一个问题,当我为应用程序开发测试时,配置无法正确地获取端点。有人能帮我吗?
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField STRING, API_URL, '"https://end-point-production/"'
}
debug {
buildConfigField STRING, API_URL, '"https://end-point-dev/"'
}
}
productFlavors {
ui_tests {
buildConfigField STRING, API_URL, '"http://end-point-tests/"'
}
}
public class BaseController {
// Service url.
protected static final String API_URL = BuildConfig.API_URL;
/**
* Crates a basic retrofit request.
*
* @return Retrofit request.
*/
public static Retrofit getRetrofit() {
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(5, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);
client.setWriteTimeout(5, TimeUnit.SECONDS);
return new Retrofit.Builder()
.baseUrl(API_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create()))
.build();
}
}
@Before
public void setUp() throws Exception {
server = new MockWebServer();
server.start(8681);
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(5, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);
client.setWriteTimeout(5, TimeUnit.SECONDS);
new Retrofit.Builder()
.baseUrl(API_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.create()))
.build();
}

发布于 2017-10-14 21:40:19
你可以试着这样做:
还有一种额外的风味
productFlavors {
non_test {
}
ui_tests {
buildConfigField STRING, API_URL, '"http://end-point-tests/"'
}
}
applicationVariants.all { variant ->
println("Iterating variant: " + variant.getName())
if (variant.getName() == "ui_testsRelease") {
buildConfigField STRING, API_URL, '"https://end-point-production/"'
} else if (variant.getName() == "ui_testsDebug") {
buildConfigField STRING, API_URL, '"http://end-point-tests/"'
} else if (variant.getName() == "non_testRelease"){
buildConfigField STRING, API_URL, '"https://end-point-production/"'
} else if (variant.getName() == "non_testDebug") {
buildConfigField STRING, API_URL, '"https://end-point-dev/"'
}
}或者举个例子(看起来更好一些):
刚把 ui_tests 从 productFlavors 移到 buildTypes
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
buildConfigField STRING, API_URL, '"https://end-point-production/"'
}
debug {
buildConfigField STRING, API_URL, '"https://end-point-dev/"'
}
ui_tests {
buildConfigField STRING, API_URL, '"http://end-point-tests/"'
}
}https://stackoverflow.com/questions/46749263
复制相似问题