1. 程式人生 > >[Gradle] Android Studio批量打包完全自定義APK包名

[Gradle] Android Studio批量打包完全自定義APK包名

Gradle 本身是基於 Groovy 語法, 支援批量打包, 非常方便, 大家都知道的.  但在批量打包時, 肯定有個包名重新命名的需求, 比如當前專案的 versionName 是 1.2.0, 使用者在裝置安裝APK後所看到的版本號就是 v1.2.0. 當然, APK 應用還有個名稱, 比如叫 AppName (當然, 這個名字隨意啦, 一般都是英文單片語成),  然後有 3 個渠道, 比如是 appchina, tencent 和 hiapk.  

然後,  一般預設打包出來的 APK 檔名都是類似這樣: AppName-appchina-release.apk.  現在我們想在批量打包時, 還對這個名字完全重新命名, 變成: AppName_appchina_v1.2.0, AppName_hiapk_v1.2.0 和 AppName_tencent_v1.2.0. 

之前很流行一句話是吧, Talk is cheap, show me your code. 來吧, 直接上程式碼, 在專案的 build.gradle 檔案中加入僅僅是以下少量的程式碼: 

	productFlavors {
        tencent {
            manifestPlaceholders = [CHANNEL_VALUE: "tencent"]
        }
        hiapk {
            manifestPlaceholders = [CHANNEL_VALUE: "hiapk"]
        }
        appchina {
            manifestPlaceholders = [CHANNEL_VALUE: "appchina"]
        }
        mumayi {
            manifestPlaceholders = [CHANNEL_VALUE: "mumayi"]
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(output.outputFile.name, "AppName_"+variant.productFlavors[0].name+"_v${variant.versionName}.apk"))
        }
    }

versionName 的值隨意, 這裡是 1.2.0

有了前面的條件前提, 看上面的程式碼應該很容易理解. 用自定義的檔名直接替換整個檔名,  自定義的檔名字首是 "AppName_", 後面加上當前的渠道號名稱字串, 再拼接上下劃線 "_" 和當前 build.gradle 檔案中 versionName 的值.  也就是, 最終檔名為,  AppName_當前渠道號名稱_v1.2.0.apk.  整個命名關鍵的兩個變數是, 當前渠道號名稱 和 版本號, 有了這兩個值你就能按自己的需求重新命名APK了對吧, 當然 Gradle 所支援 Groovy 的豐富語法不僅僅這點地方體現, 自己還可以在檔案中編寫獲取新的命名的方法, 獲取當前打包的日期, 或者獲取versionCode, 等等. 這個, 以此拋磚引玉自行體會了哈.

最後打包結果是這樣:


大功告成~