通常,我们的应用都会有开发环境、测试环境等,现在我分别想要一个测试环境的包和一个线上环境的包,我不想在代码中去修改我的BASE_URL(各个环境的地址url)来达到这个需求,那么,只能使用gradle配置了。
在一般情况下,我们都会写一个类来存放请求的url地址,比如:
public class Contons {
public static final String BASE_URL = "http://.......";
public static final String personMsg = BASE_URL+"api/person.do";
.....
}
然后再打包的时候在各个BASE_URL之间轮番切换,每次打包都要从测试环境切换到正式环境,万一忘记了,肯定又挨批了!如果我们把不同版本的BASE_URL配置在gradle中,不同的版本配置不同的BASE_URL;
我们在app的gradle中配置一些url地址,我写在了android节点的下面:
//正式环境
def API_RELEASE_HOST = "\"http://release.api.cn\""
//开发环境
def API_DEV_HOST = "\"http://dev.api.cn\""
有了两个网址,接下来我们在defaultConfig中引用:
defaultConfig {
applicationId "sa.xiao.rxjavademo"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
buildConfigField("String", "API_HOST", "${API_DEV_HOST}")
}
这句话就是引用上面的地址:
buildConfigField("String", "API_HOST", "${API_DEV_HOST}")
配置好后,在buildTypes下面配置我们的不同版本,我这里确定了两个版本,正式的和测试的:
buildTypes {
release {
//id 根据你自己的需要设置是否可以同时在一个手机上运行多个自己的app。
applicationIdSuffix ".release"
//是否输出日志
buildConfigField "boolean", "LOG_DEBUG", "true"
//url动态替换,正式url
buildConfigField "String", "API_HOST", "${API_RELEASE_HOST}"
// 移除无用的resource文件
shrinkResources true
//是否混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
dev{
//测试包,设置识别码(个人理解)
applicationIdSuffix ".dev"
//是否输出日志
buildConfigField "boolean", "LOG_DEBUG", "true"
//url动态替换
buildConfigField "String", "API_HOST", "${API_DEV_HOST}"//API Host
// 移除无用的resource文件
shrinkResources true
//是否混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
这样,我们在不同的版本中配置不同的BASE_URL地址,然后在productFlavors节点配置相关信息:
productFlavors{
flavors_release{
manifestPlaceholders = [str:"releaseStr",package_name:"com.telehot.quan"]
resValue("string"
, "strKey","releaseStrValue")
}
flavors_dev{
manifestPlaceholders = [str:"devStr",package_name:"com.telehot.quan.dev"]
resValue("string"
, "strKey","devStrValue")
}
}
配置完成,点击同步后,在BUildConfig中会动态生成API_HOST,然后在你的url的类中,修改BASE_URL:
public static final String LOGIN_URL = BuildConfig.API_HOST + "/api/user/login";
我们获取BuildConfig中的API_HOST,在打包的时候,选择不同的包,BuildConfig的API_HOST会做出对应的改变,这样,就不用手动修改BASE_URL了!