在开发Android
过程当中,经常须要构建不一样环境的Apk,好比咱们有可能会须要有三个环境javascript
三种环境对应不一样的服务器地址:java
public static final String DEV_URL = "http://dev.domain.com/";
public static final String TEST_URL = "http://test.domain.com/";
public static final String RELEASE_URL = "http://www.domain.com/";复制代码
可使用一个变量配置使用不一样的环境:服务器
//0 dev
//1 test
//2 release
public static final int ENV_SETTING = 0;复制代码
定义一个获取不一样环境url的方法,默认为dev
环境:app
public static String getBaseUrl() {
switch (ENV_SETTING) {
case 1:
return TEST_URL;
case 2:
return RELEASE_URL;
default:
return DEV_URL;
}
}复制代码
这样能够经过设置ENV_SETTING构建不一样的Apk:dom
可是这样作却有一些问题,就是每次必须修改ENV_SETTING的值,每次更改都会致使版本库变更,产生新的提交,若是提交以后的话,其余的开发者不必定会知道版本库的变更,致使环境不一样产生错误,还有可能环境不对,生产出了错误环境的Apk. 有没有办法解决如下问题呢?工具
gradle
能够解决上面的三个问题,下面就看下如何使用gradle
解决上面的问题吧!buildConfigField
是gradle的一个方法,他的做用是能够给BuildConfig添加变量,赋值等。它的使用: 测试
buildConfigField("int", "ENV_SETTING", "0")gradle
这样就给BuildConfig
中新增长了一个变量EN_SETTING
,新增的代码以下:ui
// Fields from build type: debug
public static final int ENV_SETTING = 0;复制代码
在代码中使用BuildConfig
新增的变量EN_SETTING
:url
//0 dev
//1 test
//2 release
public static final int ENV_SETTING = BuildConfig.ENV_SETTING;复制代码
buildConfigField
经过BuildConfig
类能够把gradle
里的配置传递给Java代码。只是传递给了Java值还不能解开始说的三个问题。下面再看下如何在gradle
中配置不一样的环境。
虽然经过gradle
中能够配置ENV_SETTING
变量,经过buildConfigField
可让java代码获取到设置的值。可是在buildTypes中只能设置两个变量release
和debug
:
buildTypes {
release {
signingConfig signingConfigs.release
buildConfigField("int", "ENV_SETTING", "2")
}
debug {
buildConfigField("int", "ENV_SETTING", "0")
}
}复制代码
buildTypes
中只有两种配置,在build的时候只能生产出两个Apk:debug和release,须要第三种环境的Apk,就须要定义一种新的buildTypes
,用来构建测试环境的Apk. 新增长一种buildTypes
:
buildTypes {
release {
signingConfig signingConfigs.release
buildConfigField("int", "ENV_SETTING", "2")
}
debug {
buildConfigField("int", "ENV_SETTING", "0")
}
releaseTest.initWith(buildTypes.release)
releaseTest {
buildConfigField("int", "ENV_SETTING", "1")
}
}复制代码
新增长buildTypes
叫作releaseTest
(注意不能使用test开头)。 它继承了buildTypes.release
的配置,能够经过buildConfigField
给ENV_SETTING
从新赋值,它会覆盖buildTypes.release
的配置。 这样就有了三种不一样的build配置。
gradle
经过assmble*
命令能够打包不一样buildTypes
的Apk,在右侧的gradle工具栏里面的build菜单栏里面能够看到三种不一样的assemble
:
这样就能够根据须要构建不一样的Apk,不须要更改代码就能够构建不一样环境的Apk,并且生成的Apk的名字也能区分出不一样的环境,经过上面的配置能够构建出三种Apk:
还能够根据上面的配置须要设置不一样的Apk签名,经过signingConfig
进行设置。