每次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}`