前言
最近公司开了新项目,对接不同的客户,并且后端服务是直接部署在客服的服务器上,这就要求我们的项目名,服务端地址必须跟客户对应。当然如果你一个一个的改,一个一个的打包,没问题,但是这样太麻烦了,费时费力,几十个客户,就要求你改几十次,重复打几十次包,想想都蛋疼。作为一个合格的程序员,怎么可能去做这么蠢的体力劳动,有这个时间,我都可以打完几局王者荣耀了,说不定都升入星耀了,ok,不扯淡了,直接上代码配置。
配置
由于我们并不要求logo也换,所以关于logo的配置我没有写,关于更细节的要求你可以参考这篇blog多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源
1,在Manifest.xml配置我们的Channel_value
<meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />
2,修改我们app下的build.gradle文件
apply plugin: 'com.android.application'
//配置时间
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion 27
buildToolsVersion '27.0.3'
//TODO---因为我们要求app_name不同,所以一定不要在string.xml里面定义app_name,不然会报错
defaultConfig {
applicationId "com.kd.machine"
minSdkVersion 19
targetSdkVersion 27
versionCode 1
versionName "1.0.0"
//resValue 其实跟string.xml直接写app_name一样,动态添加
resValue "string", "app_name", "调试xxxx"
//这里我定义了我们本地调试的服务器地址,我这里定义成了常量
buildConfigField "String", "IpAddressAndPort", '"http://47.94.156.205:80"'
//这里是我们调试的默认省份,,我这里定义成了常量
buildConfigField "String", "Province", '"调试省份"'
multiDexEnabled true
//这里添加了调试渠道
manifestPlaceholders = [
"OCR_API_KEY": "273a238bfb9871e94df6cd4319f56c38",
CHANNEL_VALUE: "sdkd"
]
ndk {
//Luban turbo
abiFilters 'armeabi-v7a', 'x86'
}
}
//这里是我们配置的渠道信息
productFlavors {
test {//这个是配置的测试环境渠道
resValue "string", "app_name", "测试xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://47.94.156.205:80"'
buildConfigField "String", "Province", '"测试省份"'
// 修改 AndroidManifest.xml 里渠道变量
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "test"
]
}
//下面的渠道,就是我们生产环境要求的
shandong {
resValue "string", "app_name", "山东xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://103.239.153.75:8000/"'
buildConfigField "String", "Province", '"山东"'
// 修改 AndroidManifest.xml 里渠道变量
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "shandong"
]
}
shanxi {//山西
resValue "string", "app_name", "山西xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://218.26.228.130:8000/"'
buildConfigField "String", "Province", '"山西"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "shanxi"
]
}
shanxii {//陕西
resValue "string", "app_name", "陕西xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://1.85.55.167:8000/"'
buildConfigField "String", "Province", '"陕西"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "shanxii"
]
}
guangxi {//陕西
resValue "string", "app_name", "广西xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://47.106.194.225:86/"'
buildConfigField "String", "Province", '"广西"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "guangxi"
]
}
hubei {//陕西
resValue "string", "app_name", "湖北xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://nyt.hubei.gov.cn/"'
buildConfigField "String", "Province", '"湖北"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "hubei"
]
}
hunan {//陕西
resValue "string", "app_name", "湖南xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://222.240.191.245:4318/"'
buildConfigField "String", "Province", '"湖南"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "hunan"
]
}
yunnan {//陕西
resValue "string", "app_name", "云南xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://58.57.109.190:8000/"'
buildConfigField "String", "Province", '"云南"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "yunnan"
]
}
anhui {//陕西
resValue "string", "app_name", "安徽xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://www.ahnjpt.cn:8000/"'
buildConfigField "String", "Province", '"安徽"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "anhui"
]
}
jilin {//陕西
resValue "string", "app_name", "吉林xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://www.ahnjpt.cn:8000/"'
buildConfigField "String", "Province", '"吉林"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "jilin"
]
}
gansu {//陕西
resValue "string", "app_name", "甘肃xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://61.178.243.120:18080/"'
buildConfigField "String", "Province", '"甘肃"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "gansu"
]
}
henan {//陕西
resValue "string", "app_name", "河南xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://www.njjl.org:81/"'
buildConfigField "String", "Province", '"河南"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "henan"
]
}
qinghai {//陕西
resValue "string", "app_name", "青海xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://www.qhnjjl.net:8000/"'
buildConfigField "String", "Province", '"青海"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "qinghai"
]
}
guangdong {//陕西
resValue "string", "app_name", "广东xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://183.62.243.18:8770/"'
buildConfigField "String", "Province", '"广东"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "guangdong"
]
}
sichuan {//陕西
resValue "string", "app_name", "四川xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://202.61.89.127:8000/"'
buildConfigField "String", "Province", '"四川"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "sichuan"
]
}
xinjiang {//陕西
resValue "string", "app_name", "新疆xxxx"
buildConfigField "String", "IpAddressAndPort", '"http://220.171.42.224:88/"'
buildConfigField "String", "Province", '"新疆"'
manifestPlaceholders = ["OCR_API_KEY" : "273a238bfb9871e94df6cd4319f56c38"
, CHANNEL_VALUE: "xinjiang"
]
}
}
signingConfigs {
config {
storeFile file("debug.jks")
storePassword "123456"
keyAlias "machine"
keyPassword "123456"
v2SigningEnabled true
}
}
buildTypes {
debug {
minifyEnabled false
zipAlignEnabled true
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
}
release {
//混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
//移除无用的resource文件
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.config
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
//apk命名格式:Agricultural_Machinery_Supervision_渠道号_版本号_发布时间.apk
def fileName = "Agricultural_Machinery_Supervision_${variant.productFlavors[0].name}_v${android.defaultConfig.versionName}_${releaseTime()}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
}
后续
这个就跟我之前的多渠道打包要求不太一样,之前的多渠道,是给多个应用市场打不同的渠道包,只需要配置下渠道就行了,其它的都一样,所以用美团的walle多渠道打包很快就完事了,但是好像不太支持其它配置,当然很有可能是我不会用,所以我只能这样搞了,记录下,做个笔记,方便自己查找,在我的项目里,这个配置是可以的,如果你用了出错,可以留言交流哈。