在我们一次性打几十个渠道包的时候,如果我们想让打包完成的apk文件名按照我们想要的格式来命名,比如明确的apk的版本号,打包日期,那个渠道的包等等,这时就需要使用gradle的Variants属性来动态修改生成的apk文件名
在app(module)目录下的build.gradle文件内加入如下代码:
def buildTime() {
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd', TimeZone.getTimeZone("UTC"))
return formattedDate
}
android {
......
buildTypes {
release {
......
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为AppName_v1.0_2015-01-15_wandoujia.apk
def apkFile = "AppName_v${defaultConfig.versionName}_${buildTime()}" +
"_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, apkFile)
}
}
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
以wandoujia渠道为例,上面代码最终打包生成的apk文件名是AppName_v1.0_2015-01-15_wandoujia.apk
而且该用法可以和./gradlew assemableRelease命令结合使用,两者结合使用可以自动生成各个渠道的动态apk名
接下来分析一下,由于Android的gradle任务比较复杂,为了让gradle能更灵活的控配置管理,Android提供了applicationVariants、libraryVariants以及testVariants三种Variants,他们分别适用于app、 library、app和library
这里是循环处理每个applicationVariant,当他们的输出文件名以apk结尾并且buildType是release时,重新设置新的输出文件名,这样就达到了我们批量修改生成的文件名的目的
参考:
http://www.flysnow.org/2015/03/30/manage-your-android-project-with-gradle.html
<link rel="stylesheet" href="http://csdnimg.cn/release/phoenix/production/markdown_views-d4dade9c33.css">
转自: http://blog.csdn.net/lj402159806/article/details/54957133