大多数情况,在构建变体的时候,我们都需要对渠道包进行重命名的操作。在gradle2中也许要这样写:
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = 'unite_v' + variant.versionName + '_' + variant.productFlavors[0].name + '_' + buildType.name + '.apk'
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
简单介绍一下怎么理解这几行代码。applicationVariants是所有的的变体。在我们的app中有六个,分别是sitDebug,sitRelease,prodDebug,prodRelease,prod_rDebug,prod_rRelease。函数式函数all代表遍历所有变体,如果所有元素与指定条件相符,则返回true。那么variant就代表每一个变体了。在变体的输出文件夹也就是app/build/output/apk下边找到apk文件,那么就给他重命名。
在gradle3中,apk文件并不在app/build/output/apk下边,他在相应的渠道目录的下边,比如sitDebug包就在app/build/output/apk/sit/debug的下边。那么上边的那种写法就不适用了。直接上新学法的代码
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = 'unite_v' + variant.versionName + '_' + variant.productFlavors[0].name + '_' + buildType.name + '.apk'
}
}
其中内置变量outputFileName就是更改名称的的api,直接设置就可以更名。
拓展:
注意到variant了吧,他就是携带变体的信息,他里边有5个name:versionName,name,flavorname,basename和dirName
在写插件或者编译脚本时候可能会用到。那么四个是什么意思呢?
举个例子来说明吧,比如我们的渠道是itopDemo
- name:itopDemo
- baseName:itop-Demo
- versionName:1.2.3.04
- flavorName:itop
- dirName:itop/demo