1. 程式人生 > >自動獲取svn版本號並替換android版本號

自動獲取svn版本號並替換android版本號

使用svn作為軟體版本號的好處是一旦軟體出現問題可以定位到具體的原始碼,android應用的版本是在AndroidManifest.xml中定義的,每次打包釋出的前需要手動修改其中的android:versionCode和 android:versionName,然後再打包,非常麻煩。這裡將介紹一種自動修改的方法,每次編譯的時候自動獲取當前的svn版本號並替換AndroidManifest.xml中的版本號。

1、編寫指令碼
編寫獲取svn版本並替換android:versionCode的指令碼,以下是shell指令碼:

svnv=`svnversion | sed 's/^.*://' | sed 's/[A-Z]*$//'`
if [ -n "$svnv" ] ; then
sed -i s/versionCode=[^$]*/versionCode=\"$svnv\"/g AndroidManifest.xml
fi
result=`cat AndroidManifest.xml |grep versionCode`
echo "current svn version = $svnv , change$result"
將以上程式碼儲存起來svn_version_get.sh,放到工程目錄下測試執行:
2、eclipse設定
確定指令碼正確執行後,然後就需要讓eclipse每次build工程的時候自動執行這個指令碼,從而達到自動修改的目的。
1) eclipse中執行指令碼需要建立一個Builder,步驟如下:
右鍵點選工程→Properties→Builder→new→Program
2) 在Main設定選項裡設定指令碼路徑,設定指令碼工作路徑,最好將指令碼放到工程目錄下,之後可以將指令碼和eclipse的設定隨工程上傳到svn
3) 在Build Options裡設定build選項,選擇During manual builds,During a “Clean”,這樣以後每次eclipse裡點build project都會執行指令碼,不要選擇During auto builds,因為我們知道eclipse auto build開啟之後每次檔案改動之後會自動build workspace,然後自動build每個工程,而我們指令碼執行了之後就會修改AndroidManifes.xml檔案,又會觸發auto build,就會形成死迴圈。

4) 設定Builder的執行順序,需要將新建的builder放到Android compiler之前,因為我們的目的是修改了AndroidManifest.xml, 所以我們需要先修改再編譯apk。
5) 測試一下,Project→build Project,看看編出來的apk是否用了svn版本號。

6) 測試成功之後,可以將指令碼以及工程的設定(新建的bulder)一起上傳的svn,這樣其他開發人員更新之後無需再設定eclipse。

ps:上述的指令碼修改的是versionCode,如果修改versionName,將指令碼中的versionCode替換成versionName即可,以上內容是在Ubuntu下實現的,如果是在windows下做開發,需要另外實現指令碼,可以用ant實現windows下的指令碼。