gradle 修改java中的版本號
阿新 • • 發佈:2019-02-10
在做SDK的時候,經常需要手動去修改版本號。比如
public class Version{
//先註釋掉之前的版本號
// public static final String VERSION = "1.0";
//再寫上新的版本號
public static final String VERSION = "1.1";
}
這樣做的問題有兩個:
1. 重複勞動。完全是人工的。
2. 遺漏的可能。 換個人去開發SDK了,可能就忘了修改這個VERSION了。
藉助gradle,可以實現一種編譯時,自動修改版本號的方法。保證程式碼的隨時更新。
何時執行?
修改版本號,肯定是在編譯之前執行。不然都編譯完了再去修改版本號有個毛意義啊?所以我們得找到gradle在編譯之前可以進行的命令:preBuild。
在對應的app工程(或者library的工程)的build.gradle中,檔案最後加入:
//編譯之前,執行updateVerion
preBuild.dependsOn updateVersion
這句話就是在編譯之前,依賴updateVersion。updateVersion就是我們要進行的task——去修改版本號。
寫task指令碼
假設Version.java的內容如下:
public class Version {
public static final String VERSION = "2016-08-20";
}
在build.gradle中繼續加入:
//替換版本號
task updateVersion << {
//Version檔案的目錄。這裡應該改為你的實際目錄
def versionFileDir = projectDir.getAbsolutePath() + File.separatorChar + 'Version.java';
println versionFileDir;
//讀取舊的version字串
def oldVersionStr = findOldVersionStr(versionFileDir);
println oldVersionStr;
//獲取新的version字串
def newVersionValue = getNewVersionValue();
println newVersionValue;
//拼接為java的語句
def newVersionStr = "public static final String VERSION = \"" + newVersionValue + "\";"
println newVersionStr;
//重新寫入到檔案中
def updatedContent = new File(versionFileDir).getText('UTF-8').replaceAll(oldVersionStr, newVersionStr);
new File(versionFileDir).write(updatedContent, 'UTF-8')
}
//讀取舊的version字串
def findOldVersionStr(path) {
def readerString = "";
new File(path).withReader('UTF-8') { reader ->
reader.eachLine {
//讀取一行,如果發現有"VERSION"字元,說明是我們要修改的那一行。
if (it.contains("VERSION")) {
//儲存it到string,然後返回
readerString <<= it
return readerString
}
}
return readerString
}
}
//獲取新的版本號
def getNewVersionValue() {
//舉例:用日期作為版本號
def date = new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"));
return date;
}
rebuild執行之後,就會自動修改Version的值了。
總體流程就是:
讀取舊的一行文字,替換新的,然後重寫進去。在編譯前依賴一下task。