3

昨日リリースされたばかりのr20まで、何ヶ月も問題なくプロジェクトをビルドするためにantを使用してきました。私は基本的に、デフォルトのビルド ファイルによって提供されるフックを使用して、いくつかのマイナーな変更を行います。私のプロジェクトは 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>

これは何らかの理由で機能しなくなりましたが、Android r20 が提供する新しい ant ビルド スクリプトがとにかくこれを処理しているように見えるため、上記の 2 つのクリーン コールを削除すると問題が解決しました。

androidbuild.clean 依存関係は、$ANDROID_SDK/tools/ant/build.xml で定義されている親 build.xml の clean ターゲットを呼び出すことに注意してください。そのスクリプトをインポートするときは、次のようにします。

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

そのビルドファイルでターゲットを参照できるように(ps、これにより、build.xmlファイルにエラーがあると考えてEclipseが修正されるため、オンラインの他の人が持っているように、android build.xmlを自分のファイルにコピーして貼り付ける必要はありません提案)。

于 2012-06-29T06:41:12.020 に答える