3

几个月来我一直在使用 ant 构建我的项目,直到昨天刚刚发布的 r20 之前没有任何问题。我基本上只是使用默认构建文件提供的钩子来做一些小改动。我的项目正在使用 2 个库项目,并且在 eclipse 中构建工作正常。但是我使用 ant 进行官方签名构建(我的目标是创建构建,我的应用程序将连接到生产、登台或 qa 环境)。这是我收到的错误消息:

构建失败/Users/mwolfe/workspace/android-flex/app/build.xml:99:执行此行时发生以下错误:/Users/mwolfe/lib/android-sdk/tools/ant/build.xml:476 : ../shared/SomeSdk/sdk 解析为项目/Users/mwolfe/workspace/android-flex/shared/SomeSdk/sdk 没有project.properties 文件的路径

但是我确信这个文件夹中有一个 project.properties 文件,并且之前工作正常。查看 android 的 build.xml 中的第 476 行,它有:

 <!-- clean target -->
<target name="clean" depends="-setup, -pre-clean"
        description="Removes output files created by other targets.">
    <delete dir="${out.absolute.dir}" verbose="${verbose}" />
    <delete dir="${gen.absolute.dir}" verbose="${verbose}" />

    <!-- if we know about a tested project or libraries, we clean them too. -->
    <if condition="${project.is.test}">
        <then>
            <property name="tested.project.absolute.dir" location="${tested.project.dir}" />
            <subant failonerror="true">
                <fileset dir="${tested.project.absolute.dir}" includes="build.xml" />
                <target name="clean" />
            </subant>
        </then>
    </if>

    <!-- get all the libraries -->
    <if>
        <condition><not><isset property="dont.do.deps" /></not></condition>
        <then>
 <!-- LINE 476 HERE: -->    <getlibpath libraryFolderPathOut="project.library.folder.path" />
            <if>
                <condition>
                    <isreference refid="project.library.folder.path" />
                </condition>
                <then>
                    <!-- clean the libraries with nodeps since we already
                         know about all the libraries even the indirect one -->
                    <subant
                            buildpathref="project.library.folder.path"
                            antfile="build.xml"
                            failonerror="true">
                        <target name="nodeps" />
                        <target name="clean" />
                    </subant>
                </then>
            </if>
        </then>
    </if>
</target>

任何想法是什么导致了这个以及如何解决它?

4

1 回答 1

1

好吧,所以我想出了如何解决它。发生的事情是,无论出于何种原因,当我最初编写自己的 ant 脚本时,我有自己的干净目标,我将其称为所有子项目的干净目标,如下所示:

<target name="clean" depends="androidbuild.clean">

    <exec executable="sh" failonerror="true">
        <arg value="${ndk.dir}/ndk-build" />
        <arg value="clean" />
    </exec>
             <!-- remove the next 2 lines to fix the problem -->
    <ant target="clean" dir="${android.library.reference.1}" />
    <ant target="clean" dir="${android.library.reference.2}" />
</target>

不过,由于某种原因,这不再起作用,而且似乎新的 ant 构建脚本 android r20 为我提供了处理这个问题,因此删除上面的 2 个干净调用解决了问题。

请注意,androidbuild.clean 依赖调用父 build.xml 的 clean 目标,该目标在 $ANDROID_SDK/tools/ant/build.xml 中定义。当您导入该脚本时,请执行以下操作:

<import file="${sdk.dir}/tools/ant/build.xml" as="androidbuild" />

这样您就可以在该构建文件中引用目标(ps,这也修复了 eclipse 认为您的 build.xml 文件有错误,这样您就不需要像其他在线人那样将 android build.xml 复制并粘贴到您自己的文件中建议)。

于 2012-06-29T06:41:12.020 回答