Gradle配置之自定義APK名稱及輸出路徑。

需求是這樣的,我們的項目在上線的時候需要根據公司的明明規則重新對apk文件命名後才能發佈到市場上。於是生成的每個apk文件都需要重新命名,如果渠道較少還好說,但是如果多的話就麻煩了。


其實方法很簡單,只需要在你的app的Build.gradle文件中添加以下代碼就可以了。

android {
    ……//省略部分代碼
    applicationVariants.all {
        //判斷是release還是debug版本
        def buildType = it.buildType.name
        def fileName
        //下面的channel是獲取渠道號,你獲取渠道號不一定會和我的代碼一樣,因爲有可能你的渠道名稱的規則和我的不一樣,我的規則是${渠道名}-${applicationId},所以我是這樣取的。
        def channel = it.productFlavors[0].name.split("-")[0]
        //獲取當前時間的"YYYY-MM-dd"格式。
        def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
        //只對Release包起作用,如果不是Release包則不變更輸出路徑,否則可能導致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") {
                //我此處的命名規則是:渠道名_項目名_版本名_創建時間_構建類型.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
            }
        }
    }
    ……//省略部分代碼
}

怎麼樣?上面的代碼是不是很簡單,只需要把代碼拷貝到你的項目中然後響應的地方改成你的就OK了。代碼相信大家都能看懂,都是Groovy代碼,如果不懂可以去百度一下,教程一堆。

補充一點:上面代碼中一句println fileName可能有的同學不知道在哪裏查看,這個需要到Gradle Console中去查看。不知道在哪裏的看下面的圖片:


如果你覺得文章內容對你有幫助請幫忙頂一下,你的支持是對我最大的鼓勵。謝謝!!!

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章