Android iOS项目,修改版本号脚本及结合IDE的使用
Android iOS项目,修改版本号脚本及结合IDE的使用
来由:
每次Build都需要更改版本号的工作乏味无趣而且还容易忘记。
当初写android时,只是想到在编译之前执行一些脚本而到达目的。但是每次自己还得执行脚本就放弃了。
后来写iOS时,无意中发现xcode是支持编译前支持执行脚本的。果断写了一个(见下文)。
恩。没准Android studio也有。翻了翻IDE,找到入口(好开心)
正题:
做法:
- 生成一个版本号
- 在编译之前,修改相关配置文件
Android:
-
环境
-
IDE: Android studio (eclipse我没实践,使用eclipse的朋友可以google一下)
-
Script: shell
-
OS: Mac OS X
-
-
步骤
-
Run -> Edit-Configuration
-
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
-
iOS
-
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}`