4

Jenkins で Android テスト プロジェクトをビルドしようとすると、次のエラー メッセージが表示されます。

BUILD FAILED
C:\Progra~1\android-sdk\tools\ant\build.xml:444: The
   following error occurred while executing this line:
C:\Progra~1\android-sdk\tools\ant\build.xml:444: subant task calling
   its own parent target.

これはどういうわけか既知の問題のようです ( https://code.google.com/p/android/issues/detail?id=21108https://wiki.jenkins-ci.org/pages/viewpage.action?pageId =58917193 )。報告されているように、問題は実際には修正されているはずですが、私はまだ説明されている問題に直面しています。

私は Windows Server で Jenkins を実行しており、最新の Android ツール (SDK ツール v22.0.1、プラットフォームおよびビルド ツール v17) をインストールし、Ant 1.9.0 を利用しています。

プロジェクトの構造は次のとおりです。

  • プロジェクトA
  • プロジェクト A のテスト プロジェクト

両方の Jenkins で専用のビルド ジョブを作成しました。両方のプロジェクトの build.xml ファイルは、「android update」コマンドで作成されています (Android 仕様で説明されているとおり)。したがって、どちらも android-sdk/tools/ant フォルダーから build.xml を参照しています。subant の Apache Ant 仕様 ( http://ant.apache.org/manual/Tasks/subant.html ) を参照すると、これが失敗の原因である可能性があります。

このタスクは、それが含まれている同じビルド ファイルを呼び出す場合、ターゲットの外部で使用しないでください。

あなたの誰かが同様の問題に遭遇しましたか? それを解決する方法はありますか?

よろしくお願いします。

4

2 に答える 2

2

「報告どおり、問題は実際には修正されているはずですが、私はまだ説明されている問題に直面しています。」

あなたが参照している問題 ( issue 21108: SDK Tools r14 で壊れたライブラリ プロジェクトのテスト) は修正されていません。これは問題 21304 に似ています: "ant debug installt" はテスト プロジェクトで機能するはずです。これは修正されません。

Joe Bowbeer による回避策は次のとおりです。

  1. tested.project.dirから削除ant.properties

  2. run-testsにターゲットを追加build.xml:

    <!-- SDK Tools r15 workaround -->
    <property name="tested.manifest.package" value="com.example.test" />
    
    <target name="run-tests">
     <echo>Running tests...</echo>
     <exec executable="${adb}" failonerror="true">
       <arg line="${adb.device.arg}" />
       <arg value="shell" />
       <arg value="am" />
       <arg value="instrument" />
       <arg value="-w" />
       <arg value="${tested.manifest.package}/${test.runner}" />
     </exec>
    

  3. コマンド ラインを使用してテストを実行します。

    $ ant debug install run-tests
    

つまり、1 つのinstalltターゲットを使用していた場合は、それを変更する必要があります。

于 2013-07-17T20:44:28.407 に答える
1

さらに数時間の調査の後、最終的に回避策を見つけました!

なぜ自分のマシンでローカルにビルドできたのに、Jenkins を使用したり、Jenkins が実行されているリモート サーバーのコマンド ラインから ANT を使用したりできなかったのか、常に疑問に思っていました。. したがって、ANTを実行する代わりに...

ant -Dsdk.dir=<YOUR SDK DIR> -Dtested.project.dir=<PATH TO YOUR PROJECT UNDER TEST> clean debug install test

...

ant.properties ファイル内の testing.project.dir プロパティをサーバー上の正しいパスに設定し、これをソース コード リポジトリにチェックインしました。次に、Jenkins の ANT の引数のリストからプロパティを削除して、Jenkins が実行のみを行うようにしました。

ant -Dsdk.dir=<YOUR SDK DIR> clean debug install test

そして最後にそれは機能します。

(もちろん、特定のパス情報をリポジトリにチェックインすることは一般的には良い習慣ではありません。しかし、最終的には機能しています...)

于 2013-09-27T08:21:07.100 に答える