前段时间发版app出现了问题,app上的服务器链接竟然是测试服务器的链接,这让我很尴尬。
因为每次正式和测试服务器的切换都是手动替换的,所以才会出现这种问题,然后我就在想能不能根据release和debug来进行切换正式和测试的服务器链接。最后研究出结果,在这里记录。
正式和测试的代码是在build.gradle中实现的。
def Base_Url = "\"http://正式服务器/\"" //斜杠必须得加,为了让java代码识别这是String类型
def CBase_Url = "\"http://测试服务器/\""
def Base_UM = "baidu"
android {
//中间省略若干代码
buildTypes {
release {
//混淆
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
//密钥直接run生效
signingConfig signingConfigs.release
//正式,其中“BASE_URL”为Java中引用的字段
buildConfigField "String", "BASE_URL", Base_Url
//友盟来源设置,如果你接了友盟
manifestPlaceholders = [umeng_app_key: Base_UM]
}
debug {
//混淆
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
//密钥直接run生效
signingConfig signingConfigs.release
//测试
buildConfigField "String", "BASE_URL", CBase_Url
manifestPlaceholders = [umeng_app_key: "ceshi"]
}
}
//自动生成指定名称的release发布版的 apk文件
android.applicationVariants.all { variant ->
def appName
if(variant.buildType.name.equals('release')){
//在正式模式下,再根据服务器链接来判断是否为正式服务器
if(Base_Url.contains("api")){
if(Base_UM.equals("guanwang")){
appName = "NameV"+defaultConfig.versionName
}else{
appName = "Name-"+Base_UM+"V"+defaultConfig.versionName
}
}else if(Base_Url.contains("sixsix")){
appName = "测试_V"+defaultConfig.versionName
}else {
appName = "未知_V"+defaultConfig.versionName
}
} else {
appName = "测试"
}
// if(variant.buildType.name.equals('release')){
// } else {
// }
variant.outputs.all { output ->
outputFileName = "${appName}.apk"
}
}
}
在java中引用BASE_URL:
String BASE_URL = BuildConfig.BASE_URL;
在AndroidManifest.xml中引用友盟来源
<meta-data android:value="${umeng_app_key}" android:name="UMENG_CHANNEL"/>
最后的那个自动生成apk,是为了更加方便。因为要生成不同来源的apk进行上传,为了不用每次生成改名字,直接这么生成名字。