Toc
0 results found
在 ant 中使用 exec 更新版本号
2015/07/17 Development Android

最近在 Android 中用 Ant 自动打包的过程中,有个要求,是从 Git 获取版本提交的总次数,加上最初版本的版本号,做为最新版本的版本号。

起初是写了一个 shell 脚本来做这件事。

#!/bin/bash

cd /home/serious/Workspace/client/
count=`git rev-list origin/master --count`
result=2.0.$count
echo $result

sed -i "s/android:versionName=\"2.0.*\"/android:versionName=\"${result}\"/g" AndroidManifest.xml

但是这么一来,打包之前就会多一个步骤。我这么懒的人,怎么能允许这种事情发生?怎么能坐以待毙?

于是就翻看了 ant 的文档,找到解决方案。

在 build.xml 中,加入这么一段:

<target name="versioncode">
<exec executable="sh">
<arg value="update_vercode.sh" />
exec>
target>

搞定。

但是,这样还多了个 sh 文件啊。我作为一个并不是处女座的洁癖,怎么能允许这种事情发生?怎么能坐以待毙?

于是找到了下面的解决方案:

<target name="versioncode">
<exec executable="sh" outputproperty="v_name">
<arg value="-c" />
<arg value="git rev-list origin/master --count" />
exec>
<echo>Revision (app): ${v_name}echo>
<replaceregexp file="AndroidManifest.xml" match='android:versionName="2.0.*"' replace='android:versionName="2.0.${v_name}"' />
target>

Ant 中执行系统命令时(比如上文的 git 命令和 sh 命令),在 Windows 下和在 Linux 下的方式是不同的。

  • Windows
<target name="help">
<exec executable="cmd">
<arg value="/c"/>
<arg value="ant.bat"/>
<arg value="-p"/>
exec>
target>
  • Linux
<target name="help">
<exec executable="sh">
<arg value="-c"/>
<arg value="ant.sh"/>
<arg value="-p"/>
exec>
target>
打赏
支付宝
微信
本文作者:CodingRabbit
版权声明:本文首发于CodingRabbit的博客,转载请注明出处!