需求是這樣的贤重,我們的項目在上線的時候需要根據(jù)公司的明明規(guī)則重新對apk文件命名后才能發(fā)布到市場上清焕。于是生成的每個apk文件都需要重新命名,如果渠道較少還好說滚停,但是如果多的話就麻煩了粥惧。
其實方法很簡單,只需要在你的app的Build.gradle文件中添加以下代碼就可以了突雪。
android {
……//省略部分代碼
applicationVariants.all {
//判斷是release還是debug版本
def buildType = it.buildType.name
def fileName
//下面的channel是獲取渠道號,你獲取渠道號不一定會和我的代碼一樣惹想,因為有可能你的渠道名稱的規(guī)則和我的不一樣,我的規(guī)則是${渠道名}-${applicationId},所以我是這樣取的勺馆。
def channel = it.productFlavors[0].name.split("-")[0]
//獲取當(dāng)前時間的"YYYY-MM-dd"格式。
def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
//只對Release包起作用灌灾,如果不是Release包則不變更輸出路徑悲柱,否則可能導(dǎo)致AS無法自動安裝debug包。
if (buildType == "release") {
it.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apks/${it.productFlavors[0].applicationId}/${createTime}")
}
it.outputs.each {
//只對Release包起作用嘿般,如果不是Release包則不變更名稱涯冠。
if (buildType == "release") {
//我此處的命名規(guī)則是:渠道名_項目名_版本名_創(chuàng)建時間_構(gòu)建類型.apk
fileName = "${channel}_項目名稱_v${defaultConfig.versionName}_${createTime}-${buildType}.apk"
//將名字打印出來,以便及時查看是否滿意瞻赶。
println "文件名:-----------------${fileName}"
//重新對apk命名派任。(適用于Gradle4.0以下版本)
//it.outputFile = new File(it.outputFile.parent, fileName)
//重新對apk命名。(適用于Gradle4.0(含)以上版本)如果你Gradle版本是4.0以下版本則將上面的一行代碼放開并注釋下面的這一行师逸。
it.outputFileName = fileName
}
}
}
……//省略部分代碼
}
怎么樣豆混?上面的代碼是不是很簡單,只需要把代碼拷貝到你的項目中然后響應(yīng)的地方改成你的就OK了崖叫。代碼相信大家都能看懂,都是Groovy代碼,如果不懂可以去百度一下拆讯,教程一堆养叛。
補充一點:上面代碼中一句println fileName
可能有的同學(xué)不知道在哪里查看弃甥,這個需要到Gradle Console中去查看。不知道在哪里的看下面的圖片:
如果你覺得文章內(nèi)容對你有幫助請幫忙頂一下淆攻,你的支持是對我最大的鼓勵嘿架。謝謝!I∏邸蝉娜!