我试图使用自定义构建文件,以便在我的Android应用程序中显示当前的git版本。我以前没用过蚂蚁,也不知道怎么用。我读了很多关于SO的话题,在谷歌上搜索了很多,但我不能弄清楚。我真的没有时间学习蚂蚁的所有知识,但我需要这东西运行起来。在底部,您可以找到代码。
在Eclipse创建的build.xml
中导入文件custom_rules.xml
。macrodef
部分被调用,但目标未被调用。我试图更改External Tools Configurations
,选项卡Targets
,但每当我检查目标时(无论在哪个ant文件中),我都会得到一条消息:
Unknown argument: -pre-build
(当我在-pre-build
上加上复选标记时)。我试着添加这一行:
<import file="${sdk.dir}/tools/ant/build.xml" />
和定义sdk.dir
,但这不会改变任何东西。我错过了什么?正如我所说,我对ant一无所知,唯一帮助我的教程就是这个。
当前代码(custom_rules.xml
)
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse.ant.import ?>
<project name="Custom build">
<macrodef name="git" taskname="@{taskname}">
<attribute name="command" />
<attribute name="dir" default="" />
<attribute name="property" default="" />
<attribute name="taskname" default="" />
<attribute name="failonerror" default="on" />
<element name="args" optional="true" />
<sequential>
<exec executable="git" dir="@{dir}" outputproperty="@{property}"
failifexecutionfails="@{failonerror}" failonerror="@{failonerror}">
<arg value="@{command}" />
<args/>
</exec>
</sequential>
</macrodef>
<target name="-pre-build">
<git command="rev-list" property="versioning.code" taskname="versioning">
<args>
<arg value="master" />
<arg value="--first-parent" />
<arg value="--count" />
</args>
</git>
<git command="describe" property="versioning.name" taskname="versioning">
<args>
<arg value="--always" />
</args>
</git>
<echo level="info" taskname="versioning">${versioning.code}, ${versioning.name}</echo>
<replaceregexp file="AndroidManifest.xml" match='android:versionCode=".*"' replace='android:versionCode="${versioning.code}"' />
<replaceregexp file="AndroidManifest.xml" match='android:versionName=".*"' replace='android:versionName="${versioning.name}"' />
</target>
<target name="-post-build" >
<replaceregexp file="AndroidManifest.xml" match='android:versionCode=".*"' replace='android:versionCode="0"' />
<replaceregexp file="AndroidManifest.xml" match='android:versionName=".*"' replace='android:versionName="0"' />
</target>
</project>
我刚刚明白了。
- 我将目标重命名为
pre-build
和post-build
,没有-
。 - 我选择
External Tools Configurations
,并在左边选择build.xml
。在右边,我转到Targets
选项卡,检查了我的两个目标(除了build
目标已经有一个复选标记),并将订单设置为pre-build, build, post-build
。 - 我进入项目属性,选择左边的
Builders
。我使用build.xml
文件创建了一个新的构建器,并以相同的顺序包含了前面提到的三个目标。我把这个构建器放在Java构建器之前。 - 我删除了
post-build
目标,因为它把版本回到0
,似乎比我想要的更早。
我仍然不确定这是最优解决方案。此外,当没有git版本控制时,解决方案会失败。我尝试使用这个代码来解决这个问题,但它没有工作。尽管如此,这是我能做的最好的,它帮助我在应用程序中获得我需要的信息。
使用带有参数--version
的Git可执行文件,并在属性中捕获输出以供进一步使用,例如:
<project>
<exec executable="git" outputproperty="gitversion">
<arg value="--version"/>
</exec>
<echo>$${gitversion} => ${gitversion}</echo>
</project>
输出:
[echo] ${gitversion} => git version 1.8.3.msysgit.0