Android Tools r20不会使用ant构建带有库项目的项目,说我在库中缺少project.properties但我不是

时间:2012-06-29 00:07:31

标签: android ant android-build

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

  

BUILD FAILED /Users/mwolfe/workspace/android-flex/app/build.xml:99:   执行此行时发生以下错误:   /Users/mwolfe/lib/android-sdk/tools/ant/build.xml:476:   ../shared/SomeSdk/sdk解析为没有project.properties的路径   项目文件   /用户/ mwolfe /工作区/机器人柔性/共享/ SomeSdk / SDK

但是我确信这个文件夹中有一个project.properties文件,之前这个工作正常。查看build.xml的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>

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

1 个答案:

答案 0 :(得分:1)

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

<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的干净目标,该目标在$ ANDROID_SDK / tools / ant / build.xml中定义 导入该脚本时,请执行以下操作:

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

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