[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, 等等. 這個, 以此拋磚引玉自行體會了哈.
最後打包結果是這樣:
大功告成~