我们需要使用一个变量标明该app的渠道,通常我们可以在manifest中的application节点下声明,如下。
<meta-data
android:name="CHANNEL_NAME"
android:value="CHANNEL_VALUE" />
然后将CHANNEL_VALUE的值替换成对应的渠道名。我们可以使用gradle的flavor替我们完成
productFlavors {
wandoujia {}
qihu360 {}
baidu {}
hiapk {}
shoujizhushou {}
tencent {}
xiaomi {}
anzhi {}
uc {}
appchina {}
wangyi {}
mumayi {}
huawei {}
lenovo {}
flyme {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
当然有时候我们需要配置某些渠道自动更新,某些渠道部自动更新,这时候需要一个变量来标明。我们让所有渠道默认支持自动更新,让豌豆荚的不进行自动更新。
defaultConfig {
buildConfigField "boolean", "AUTO_UPDATES", "true"
}
productFlavors {
wandoujia {
buildConfigField "boolean", "AUTO_UPDATES", "false"
}
}
在程序中可以这样获得该变量
boolean autoUpdate=BuildConfig.AUTO_UPDATES;
甚至有时候需要更改生成的apk的名字,这时候可以自己定义生成的名字
//获取产品名
def getProductName() {
return "ProductName"
}
//获取时间戳
def getDate() {
def date = new Date()
def formattedDate = date.format(‘yyyyMMddHHmm‘)
return formattedDate
}
android {
...
//修改生成的apk名字
applicationVariants.all { variant ->
variant.outputs.each { output ->
def oldFile = output.outputFile
def newName = ‘‘;
if (variant.buildType.name.equals(‘release‘)) {
def releaseApkName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + ‘-signed.apk‘
output.outputFile = new File(oldFile.parent, releaseApkName)
}
if (variant.buildType.name.equals(‘beta‘)) {
newName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + "-build" + getDate() + ".apk"
output.outputFile = new File(oldFile.parent, newName)
}
if (variant.buildType.name.equals(‘debug‘)) {
newName = getProductName() + "-v${defaultConfig.versionName}-" + variant.productFlavors[0].name + "-debug" + getDate() + ".apk"
output.outputFile = new File(oldFile.parent, newName)
}
}
}
}
最后我们还需要在程序中获得我们的渠道名进行后续的一些操作,比如做一些统计之类的工作
String channel=AppUtil.getMetaValue(this,"CHANNEL_NAME");
Log.d("TAG",channel);
一切完成之后,我们就可以生成渠道包了
打开终端,输入以下命令回车就生成了所有的渠道包
gradlew assembleRelease
此外还可以点击andorid studio右边悬停的的gradle按钮,弹出的窗口里面有个圆形的execute gradle task的按钮,command Line里输入assembleRelease点击ok也可以生成所有渠道包
生成所有渠道包需要一点时间,生成完成后在app/build/outputs/apk目录下会有生成的所有的包。将对应的包上传至对应的渠道即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/sbsujjbcy/article/details/46757285