首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ProductFlavors配置

ProductFlavors配置
EN

Stack Overflow用户
提问于 2017-10-14 20:57:26
回答 1查看 330关注 0票数 1

我在我开发的应用程序的build.gradle中配置了一个常量。它是API调用的“端点”常量。当我在开发环境中开发时,应用程序调用一个“终结点”,当我在生产环境中开发时,应用程序调用另一个“终结点”。现在出现了一个问题,当我为应用程序开发测试时,配置无法正确地获取端点。有人能帮我吗?

代码语言:javascript
复制
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();
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-14 21:40:19

你可以试着这样做:

还有一种额外的风味

代码语言:javascript
复制
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

代码语言:javascript
复制
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/"'
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46749263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档