大多數(shù)情況页眯,在構(gòu)建變體的時(shí)候赊锚,我們都需要對(duì)渠道包進(jìn)行重命名的操作。在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)
}
}
}
簡(jiǎn)單介紹一下怎么理解這幾行代碼赁还。applicationVariants是所有的的變體并齐。在我們的app中有六個(gè)漏麦,分別是sitDebug,sitRelease况褪,prodDebug撕贞,prodRelease,prod_rDebug测垛,prod_rRelease捏膨。函數(shù)式函數(shù)all代表遍歷所有變體,如果所有元素與指定條件相符食侮,則返回true号涯。那么variant就代表每一個(gè)變體了。在變體的輸出文件夾也就是app/build/output/apk下邊找到apk文件锯七,那么就給他重命名链快。
在gradle3中,apk文件并不在app/build/output/apk下邊眉尸,他在相應(yīng)的渠道目錄的下邊域蜗,比如sitDebug包就在app/build/output/apk/sit/debug的下邊。那么上邊的那種寫法就不適用了噪猾。直接上新學(xué)法的代碼
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = 'unite_v' + variant.versionName + '_' + variant.productFlavors[0].name + '_' + buildType.name + '.apk'
}
}
其中內(nèi)置變量outputFileName就是更改名稱的的api霉祸,直接設(shè)置就可以更名。
拓展:
注意到variant了吧袱蜡,他就是攜帶變體的信息丝蹭,他里邊有5個(gè)name:versionName,name,flavorname,basename和dirName
在寫插件或者編譯腳本時(shí)候可能會(huì)用到。那么四個(gè)是什么意思呢坪蚁?
舉個(gè)例子來說明吧奔穿,比如我們的渠道是itopDemo
- name:itopDemo
- baseName:itop-Demo
- versionName:1.2.3.04
- flavorName:itop
- dirName:itop/demo