3

私は Emma をセットアップしましたが、以前はうまくいきました。その後、ソース コードを変更したところ、まったく生成されなくcoverage.ecなりました。生成しcoverage.emます。テストの終わり近くに、エラー メッセージが表示されます。

[exec] INSTRUMENTATION_CODE: 0
[echo] Downloading coverage file into project directory...
[exec] remote object '/sdcard/coverage.ec' does not exist

BUILD FAILED
/var/lib/jenkins/android-sdk-linux_x86/tools/ant/build.xml:1056: exec returned: 1.

build.xmlの1056行目は

"{adb}" failonerror="true".

coverage.emデスクトップにあること がわかります。つまり、コードがインストルメント化されています。

\test の下で使用するコマンドは

ant emma debug install test

これは以前はうまくいきました。コードカバレッジを実行すると、通常は単体テストの終わり近くでクラッシュしますが、常にある程度のカバレッジが得られます。今はクラッシュして生成されませんcoverage.em

私もアクセスしようとしましたが/sdcard/、完全にアクセス可能で書き込み可能です。

これは何日も私をブロックしました。どんな意見でも大歓迎です。私もこのAndroid、Ant、Emmaのすべてに慣れていないので、ありがとう!!

更新:環境をクリーンアップして、コマンドを再度実行しました。これで、coverage.em も生成されなくなりました。これは、ソース コードがインストルメント化されていないことを示しています。しかし、上記で使用したコマンドは、プロジェクトとそのテスト プロジェクトをインストルメントし、インストールしてテストを開始する必要があります。私は、coverage.ec の場所を /sdcard/coverage.ec に変更した以外は、build.xml の emma def を変更しませんでした。これは、デフォルトで /data/data に移動し、この電話のデータ/データにアクセスする権限がないためです。

Android SDK の r15 とデフォルトの build.xml を使用しています。私は、coverage.ec へのパスを /sdcard/coverage.ec に変更しただけです。インストルメンテーションを実行するには

 Go to main_project
 $andriod update project -p .
 Go to main_prject\test
 $android update project -m ../ -p .
 To start code code
 $ant emma debug install test

main_project-instrumented.apk と test_project-debug.apk が生成されました。両方がインストールされており、テストを実行していることがわかります。

4

2 に答える 2

4

まず、android コマンド ライン ツールを使用してテスト プロジェクトを作成する必要があります。

プロジェクトの作成とテスト プロジェクト

D:\AndroidProjectプロジェクトが Android API レベル 8 に保存され、プログラミングが Android API レベル 8 であると仮定します。まず、次のコマンドを使用してプロジェクトを作成します。

android update project --path ./ --name blabla~ --target android-8 --subprojects 

次に、テスト プロジェクト用のフォルダーを作成し、そのフォルダーに移動します。

mkdir Android_test
cd Android_test

次に、以下のコマンドで Android テスト プロジェクトを作成します。

 android create test-project --main ../AndroidProject --path ./

emma 取材レポート付きアリビル (ルート付き)

次のコマンドを (jenkins の選択およびビルド ステップから) 実行して、emma レポートでビルドを完了させます。

ant emma debug install test

注意: これを機能させるには、ルート化されたデバイスまたはエミュレーターを接続してから、ant コマンドを実行する必要があります。

ビルド xml ファイルを変更します (ルートは必要ありません)。

デバイスをルート化したくない場合、別の解決策はこれらのカバレッジ レポートの場所を変更することです。このためには、build.xml ファイルを変更する必要があります。

(詳細については、ここで簡単に説明されていることについてグーグルで検索する必要があります)

build.xml を開きます ->coverage.ecファイルが保存されている場所を見つけます。ほとんどの場合、これは次の場所に保存されます。/data/data/com.example.Android/coverage.ec

ここでの問題は、/data/data/~~~パスが保護されていることです (したがって、必要なルート)。

とにかく〜coverage.htmlテストプロジェクトのフォルダー/ビンにファイルを取得できます。次の手順では、これを変更してこのファイルを/sdcard代わりに保存する方法について説明します。

ファイルを開くbuild.xmlと、最後の行にコマンドが見つかりimport ~~~ build.xmlます。これは、build.xml ファイルが別の build.xml ファイルをインポートすることを意味します。

もう 1 つの build.xml ファイルは android SDK の一部であり、 にあります${Android-sdk}/tools/ant/build.xml

build.xml ファイルに必要な変更

このファイルを (問題を起こさずに) 変更することはできないため、代わりに完全なファイルを別の場所にコピーするか、プロジェクトの build.xml ファイルに直接コピーしてください。

何をするにしても、build.xml ファイルの import ステートメントを適応または変更することを忘れないでください。

これは、その新しい build.xml ファイルで変更する必要があるものです。

  • 消去するimport= ~~build.xml
  • xml=ejkwjkw?e jw ""project = "android_rule"~~ ~blablaである最初の行を消去します)
  • そして最後の行/project
  • にアドレスを更新/sdcard/coverage.ec

すると、coverage.ecファイルを取得できます〜

于 2012-10-25T04:53:47.240 に答える
2

SDKをr16に更新した後、この問題が発生しました:ツールのr15でEmmaコードカバレッジが機能しない

そしてこれは私のためにそれを修正しました:

ant all clean emma debug install test

しかし、あなたが同じ問題を抱えているかどうかはわかりません。

この電話のデータ/データにアクセスする権限がありません

それはルート化されていないデバイスですか?ビルドには次のように書かれていることに注意してください。

WARNING: Code Coverage is currently only supported on the emulator and rooted devices.

カバレッジファイルの場所を変更するだけでは、この制限を回避できない可能性があります。仮想デバイスで動作しますか?

于 2012-01-01T22:25:03.503 に答える