前两天给项目增加下载量来源统计功能,在这里介绍一下项目多渠道打包。
这里以友盟统计为例,在AndroidManifest文件里面是:
<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>
Channel ID就是渠道标识,市场上的下载渠道很多,不可能填写一次这个ID就打一次包,那会耗费很多无谓的时间和精力,所以我们需要一次性把多个渠道打包出来。
android studio 在build.gradle里面增加:
productFlavors {
xiaomi {}
_360 {}
baidu {}
wandoujia {}
yingyongbao {}
/*** 根据项目实际情况添加渠道 ***/
}
productFlavors.all {
flavors -> flavors.manifestPlaceholders =[UMENG_CHANNEL_VALUE: name]
}
然后直接执行./gradlew assembleRelease 后等待一会就ok了,打包成功后可在app\build\outputs\apk 路径看到打包成功后的apk。
介绍一下assemble命令:
- 只打包小米渠道的release版本:./gradlew assembleXiaomiRelease
- 打包小米渠道的release和debug版本:./gradlew assembleXiaomi
- 打包全部release版本:./gradlew assembleRelease
以上是多渠道打包的内容,下面介绍一下打包自动命名apk。
同样是在build.gradle里面:
buildTypes {
debug {
/**** 省略一些内容 ****/
}
release {
/**** 省略一些内容 ****/
// 将release版本的包名重命名,加上版本、日期和渠道
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为hhdb_v1.0_2016-10-04_wandoujia.apk
def fileName = "hhdb_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
添加之后build一下,会发现报错,是因为没有releaseTime方法,这个方法是自己添加的,同样在build.gradle里面头部添加:
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
完成了,收工(⊜‿⊜)