1. 程式人生 > >gradle 修改java中的版本號

gradle 修改java中的版本號

在做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。