android studio 打包自動(dòng)生成版本號(hào)與日期,apk輸入路徑詳解
一. 打開(kāi)項(xiàng)目選擇如圖示1 (build.gradle 項(xiàng)目位置)
二. 1. build.gradle 文件添加內(nèi)容如下。gradle是【com.android.tools.build:gradle:3.0.0 以下版本】
android{ defaultConfig {...} 自動(dòng)追加版本號(hào)和版本名稱(chēng) android.applicationVariants.all { variant->variant.outputs.each { output-> output.outputFile = new File(output.outputFile.parent,"app_device_v"+defaultConfig.versionName+"_"+new Date().format("yyyy-MM-dd")+"_"+buildType.name+".apk") } } }
output.outputFile.parent 可以指定輸出到指定文件夾
2. build.gradle 文件添加內(nèi)容如下。 gradle是【com.android.tools.build:gradle:3.0.0及其以上版本】
android{ defaultConfig {...} //release版本輸出包名自動(dòng)追加版本號(hào)和版本名稱(chēng) applicationVariants.all { variant -> variant.outputs.all { //只處理生產(chǎn)版本 if (buildType.name == 'release') { def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00")) // app包名稱(chēng) outputFileName = "app_v" + defaultConfig.versionName + "_" + createTime + "_" + buildType.name + ".apk" ////指定release輸出到指定文件夾 variant.getPackageApplication().outputDirectory = new File(config.appReleaseDir + "/${createTime}") } } } }
三. 打包查看結(jié)果:圖示3(直接點(diǎn)擊assembleRelease即可)
補(bǔ)充知識(shí):Android編譯gradle 動(dòng)態(tài)修改版本號(hào)
在構(gòu)建代碼的時(shí)候不想每次都修改版本號(hào),需能夠增加一個(gè)功能在特定的條件下動(dòng)態(tài)的修改版本號(hào)
在manifest里面加入占位符號(hào)
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="${versioncode}" android:versionName="${versionname}">
修改build.gradle
import com.google.gson.Gson class Version { int versionCode String versionName } def versionJsonFile = file('./version.json')//這個(gè)文件最好放一個(gè)所有項(xiàng)目人員都能夠訪問(wèn)的地方 def versionJsonObject = new Gson().fromJson(versionJsonFile.text, Version.class) android.applicationVariants.all { variant -> println("variants name : " + variant.name) //只有滿(mǎn)足特定條件的情況下才會(huì)版本自增一,這個(gè)可以看看各個(gè)項(xiàng)目的特定配置 if (variant.name.toLowerCase().contains("ceshirelease") ) { println("variants name : versionCode " + versionJsonObject.versionCode + "versionname: " + versionJsonObject.versionName) versionJsonObject.versionCode = versionJsonObject.versionCode + 1 int lastIndexPoint = versionJsonObject.versionName.lastIndexOf(".") String newStr = versionJsonObject.versionName.substring(0, lastIndexPoint) println("newStr" + newStr) versionJsonObject.versionName = newStr + "." + versionJsonObject.versionCode println("versonJsonStr.versionName " + versionJsonObject.versionName) } //這句是核心,可以調(diào)整版本號(hào)和版本明,修改了這個(gè)會(huì)影響到BuildConfig.class里面的屬性 variant.mergedFlavor.versionCode = versionJsonObject.versionCode variant.mergedFlavor.versionName = versionJsonObject.versionName //如果沒(méi)有加下面這句,當(dāng)應(yīng)用安裝后會(huì)出現(xiàn)應(yīng)用信息沒(méi)有版本號(hào)的問(wèn)題,這個(gè)必須有 variant.mergedFlavor.manifestPlaceholders.put("versioncode", versionJsonObject.versionCode) variant.mergedFlavor.manifestPlaceholders.put("versionname", versionJsonObject.versionName) } //為了記住最新的版本號(hào),是需要進(jìn)行文件的回寫(xiě)的,什么時(shí)候回寫(xiě)會(huì)好一點(diǎn) //個(gè)人認(rèn)為只有當(dāng)打包apk的動(dòng)作執(zhí)行成功后 回寫(xiě)文件記錄的版本號(hào)最優(yōu) afterEvaluate { project -> gradle.taskGraph.afterTask { task, taskState -> //這里如果assembleceshirelease 就具體的打包的變種項(xiàng)目,各個(gè)應(yīng)用肯定不一樣,需要調(diào)整下 if (task.name.toLowerCase().contains("assembleceshirelease") && taskState.getFailure() == null) { println("try assemble ceshi release" ) //回寫(xiě)文件操作 versionJsonFile.withPrintWriter { out -> out.println(new Gson().toJson(versionJsonObject)) } } } }
給apk重新命名也是同樣的道理
variant.getOutputs().all { File file = it.outputFile; println(" file property file.canRead() " + file.canRead() + " file.canWrite " + file.canWrite()) String pathString = file.getPath(); println(" path String : " + pathString + " File.pathSeparator: " + File.separator) //指定最終輸出的文件的目錄和名字 pathString = file.getParent() + File.separator + "test.apk"; println(" path pathString : " + pathString) file.renameTo(pathString) }
以上這篇android studio 打包自動(dòng)生成版本號(hào)與日期,apk輸入路徑詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程之繪制文本(FontMetrics)實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程之繪制文本(FontMetrics)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android使用FontMetrics對(duì)象繪制文本的相關(guān)技巧,需要的朋友可以參考下2015-12-12Android自定義ViewGroup實(shí)現(xiàn)標(biāo)簽流效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup實(shí)現(xiàn)標(biāo)簽流效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Android使用BroadcastReceiver監(jiān)聽(tīng)網(wǎng)絡(luò)連接狀態(tài)的改變
這篇文章主要為大家詳細(xì)介紹了Android使用BroadcastReceiver監(jiān)聽(tīng)網(wǎng)絡(luò)連接狀態(tài)的改變,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android使用ViewPager實(shí)現(xiàn)頂部tabbar切換界面
這篇文章主要為大家詳細(xì)介紹了使用ViewPager實(shí)現(xiàn)頂部tabbar切換界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android如何從實(shí)現(xiàn)到封裝一個(gè)MVP詳解
原生的 MVC 框架遇到大規(guī)模的應(yīng)用,就會(huì)變得代碼難讀,不好維護(hù),無(wú)法測(cè)試的囧境。因此,Android 開(kāi)發(fā)方面也有很多對(duì)應(yīng)的框架來(lái)解決這些問(wèn)題。所以這篇文章主要給大家介紹了關(guān)于Android如何從實(shí)現(xiàn)到封裝一個(gè)MVP的相關(guān)資料,需要的朋友可以參考下。2017-09-09Android自定義View葉子旋轉(zhuǎn)完整版(六)
這篇文章主要為大家詳細(xì)介紹了Android自定義View葉子旋轉(zhuǎn)完整版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android實(shí)現(xiàn)大圖滾動(dòng)顯示效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)大圖滾動(dòng)顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android編程基礎(chǔ)之Menu功能菜單設(shè)計(jì)實(shí)例
這篇文章主要介紹了Android編程基礎(chǔ)之Menu功能菜單,結(jié)合實(shí)例形式分析了基本的Menu功能菜單原理、定義與響應(yīng)機(jī)制,需要的朋友可以參考下2016-10-10