每次Build都須要更改版本號的工做乏味無趣並且還容易忘記。android
當初寫android時,只是想到在編譯以前執行一些腳本而到達目的。可是每次本身還得執行腳本就放棄了。git
後來寫iOS時,無心中發現xcode是支持編譯前支持執行腳本的。果斷寫了一個(見下文)。web
恩。沒準Android studio也有。翻了翻IDE,找到入口(好開心)shell
環境xcode
IDE: Android studio (eclipse我沒實踐,使用eclipse的朋友能夠google一下)bash
Script: shelleclipse
OS: Mac OS Xide
步驟工具
Run -> Edit-Configurationui
Before launch -> 點擊 + (Before launch在最下面,記得拉下去)
選擇Run External Tools -> + -> +
Edit Tool 界面
Options中的內容看你狀況選擇
program 解釋器路徑
Parameters 要執行的腳本和參數
Working directory 工做路徑
scrpit
這部分最好根據實際狀況本身寫一個。下面是個人例子
經過git的提交次數做爲Build號,結合git tag的信息生成版本號
修改AndroidManifest.xml
build號:項目提交次數經過
git rev-list HEAD | wc -l
主子版本號: 根據最後一個tag肯定,個人tag的格式 v2.0.1
version_name=`git tag | tail -1 | sed 's/v//'` version_name=`echo ${version_name%.*}.$patch | tr -d ' '`
所有腳本:
#!/bin/bash project_home=$1 echo "project home is $project_home" patch=`git rev-list HEAD | wc -l | tr -d '\t '` echo "current patch is $patch" version_name=`git tag | tail -1 | sed 's/v//'` version_code=$patch version_name=`echo ${version_name%.*}.$patch | tr -d ' '` echo "version name is $version_name" echo "version code is $version_code" cat $project_home/AndroidManifest.xml | \ sed -e "s/android:versionCode=\".*\"/android:versionCode=\"${version_code}\"/" \ -e "s/android:versionName=\".*\"/android:versionName=\"${version_name}\"/" \ > $project_home/.AndroidManifest.xml mv $project_home/.AndroidManifest.xml $project_home/AndroidManifest.xml
plist
這部分用到PlistBuddy。能夠自行google一下。
plist文件,是由key:value組合而成。
咱們只用將Build號寫入/修改到相應plist文件便可。
PlistBuddy是個工具。幫助你方便更新 plist文件。
步驟
選擇工程 -> Editor -> Add Build Phase -> Add Run Script Build Phase
選擇工程 -> Build Parse標籤 -> Run Scrpit
scrpit
ver=`git rev-list HEAD | wc -l` echo "Build number is ${ver}" filepath="${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}" echo "Updating ${filepath}" `/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${ver}" ${filepath}` filepath="${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist" echo "Updating dSYM at ${filepath}" `/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" ${filepath}` `/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${ver}" ${filepath}`