之前实现了在正式和测试版本之间的切换:https://blog.youkuaiyun.com/R_ine/article/details/81412650
但是如果切换版本生成包会麻烦,需要一个个参数修改,然后再次生成。然后我就在想能不能实现一次性打包多个版本的apk。
然后查阅资料进行研究,下面看代码。
def Base_Url = "\"http://正式服务器/\"" //斜杠必须得加,为了让java代码识别这是String类型
def CBase_Url = "\"http://测试服务器/\""
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"]
}
}
//不同版本的参数
flavorDimensions "default"
productFlavors {
guanwang{
resValue "string", "app_name", "app名" //这是替换strings中的app_name。删strings中的app_name,不然会报错!
Base_UM = "guanwang" //友盟纪录渠道
buildConfigField "String", "Base_UM", "\""+Base_UM+"\""
manifestPlaceholders = [umeng_app_key : Base_UM]
}
baidu {
resValue "string", "app_name", "app名"
Base_UM = "baidu"
buildConfigField "String", "Base_UM", "\""+Base_UM+"\""
manifestPlaceholders = [umeng_app_key : Base_UM]
}
xiaomi {
resValue "string", "app_name", "app名"
Base_UM = "xiaomi"
buildConfigField "String", "Base_UM", "\""+Base_UM+"\""
manifestPlaceholders = [umeng_app_key : Base_UM]
}
debug1{
resValue "string", "app_name", "app名"
Base_UM = "debug"
buildConfigField "String", "Base_UM", "\""+Base_UM+"\""
manifestPlaceholders = [umeng_app_key : Base_UM]
}
}
//自动生成指定名称的release发布版的 apk文件
android.applicationVariants.all { variant ->
def appName
//下面是修改每个版本的apk文件的名字
if(variant.buildType.name.equals('release')){
if(New_Base_Url.contains("api")){
if(Base_UM.equals("guanwang")){
appName = "NameV"+defaultConfig.versionName
}else{
def um = "${variant.productFlavors[0].name}"
appName = "Name-"+um+"V"+defaultConfig.versionName
}
}else if(Base_Url.contains("sixsix")){
appName = "测试_V"+defaultConfig.versionName
}else {
appName = "未知_V"+defaultConfig.versionName
}
} else {
appName = "测试"
}
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"/>
具体可以参考以下:
https://blog.youkuaiyun.com/abc6368765/article/details/52786509
https://blog.youkuaiyun.com/zhourui_1021/article/details/78800399