在Eclipse中构建



我试图使用自定义构建文件,以便在我的Android应用程序中显示当前的git版本。我以前没用过蚂蚁,也不知道怎么用。我读了很多关于SO的话题,在谷歌上搜索了很多,但我不能弄清楚。我真的没有时间学习蚂蚁的所有知识,但我需要这东西运行起来。在底部,您可以找到代码。

在Eclipse创建的build.xml中导入文件custom_rules.xmlmacrodef部分被调用,但目标未被调用。我试图更改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-buildpost-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

相关内容

  • 没有找到相关文章

最新更新