2012-08-30 12 views
7

JavaとC/JNIコードの組み合わせであるAndroidプロジェクトのテストでEmmaを実行しようとしています。ビルドとテストは正常に動作しますが、emmaを追加するたびに、私は不思議な例外が発生します。私はAndroid SDK v20.1とNDK r8bを使用しています。Androidのビルドに「emma」を追加するビルドのトリガー「ローカル変数の型の不一致」の例外

プロジェクトは、ここではそのAndroidのライブラリプロジェクトです: https://github.com/guardianproject/IOCipher とテストはここにある: https://github.com/guardianproject/IOCipherTests

build.xmlファイルはandroid update test-projectを使用して生成されます。ここ

例外です:

-dex: 
     [dex] Converting compiled files and external libraries into /var/lib/jenkins/workspace/IOCipherTests/IOCipherTests/bin/classes.dex... 
     [dx] 
     [dx] EXCEPTION FROM SIMULATION: 
     [dx] local variable type mismatch: attempt to set or access a value of type int using a local variable of type info.guardianproject.libcore.io.ErrnoException. This is symptomatic of .class transformation tools that ignore local variable information. 
     [dx] 
     [dx] ...at bytecode offset 0000002e 
     [dx] locals[0000]: Linfo/guardianproject/iocipher/File; 
     [dx] locals[0001]: Linfo/guardianproject/iocipher/FileDescriptor; 
     [dx] locals[0002]: <invalid> 
     [dx] locals[0003]: <invalid> 
     [dx] locals[0004]: <invalid> 
     [dx] locals[0005]: [Z 
     [dx] stack[top0]: int{0x00000001/1} 
     [dx] ...while working on block 002c 
     [dx] ...while working on method createNewFile:()Z 
     [dx] ...while processing createNewFile()Z 
     [dx] ...while processing info/guardianproject/iocipher/File.class 
     [dx] 
     [dx] 1 error; aborting 
BUILD FAILED 
/opt/android-sdk/tools/ant/build.xml:850: The following error occurred while executing this line: 
/opt/android-sdk/tools/ant/build.xml:852: The following error occurred while executing this line: 
/opt/android-sdk/tools/ant/build.xml:864: The following error occurred while executing this line: 
/opt/android-sdk/tools/ant/build.xml:266: null returned: 1 
+0

antビルドファイルplzの関連部分を追加してください。 – coolcfan

+0

ant buildファイルは 'android update test-project'を使って生成されたものです。私は本当に投稿する部分を知りません。 –

+0

FWIW CまたはJNIコードを持たないライブラリプロジェクトで同じエラーが発生しました。 – spacemanaki

答えて

3

私は同じエラーを得ていたant clean emma debug install testが例外をトリガしながらant clean debug install testを実行するたびに動作します。私のプロジェクトでは、1つのプロジェクトにユニットテストアプリがありました。これはユニットテストを含む別のプロジェクトをラップしています。どちらのプロジェクトも、私のSDKへの参照を保持していましたが、chaitanyaが示唆しているように、emmaにSDKコードを2回計測させていました。ユニットテストプロジェクトでSDKへの参照を削除することで、エラーを解決できました。

+0

はい、これも私のために解決しました。私のSDKテストは私のメインプロジェクトの下のディレクトリにあります。 ant.propertiesの私のテストプロジェクトでは、私はこの行をコメントアウトしました: #tested.project.dir =/Users/audrey/Developer/MyProject-SDKそして私はこれらのエラーを取得するのをやめました。 – atroutt

+1

「私のSDK」はどういう意味ですか? Android SDK、または自作のライブラリですか? –

0

私は(私は、これはここでは重要ではないと思いますが、CMakeのいくつかの助けを借りて、アリなし)コマンドラインからのAndroid APKプロジェクトをビルドすると私は同じエラーを満たし、二つのことは、私を助け:

  1. hereから、私はという情報を得ました。「emmaがローカル変数テーブルを正しく管理していない場合は、ローカル変数のデバッグ情報を持っているクラスファイルをインストルメントすると、Android用のクラスファイルを変換しようとするとエラーが発生します。この問題を回避するには、ローカル情報ではなく、ラインとソースのデバッグ情報のみでJavaクラスをコンパイルしてください。 "、私はJavaコンパイラにフラグを追加します-g:{lines,source}

  2. 私はまた、計装からEmmaクラス自体を除外しました。私の計測コマンドはjava -cp emma/emma_device.jar emma instr -ix -*.test.*,-com.google.android.*,-com.vladium.* -m overwrite -cp ${CMAKE_JAVA_TARGET_OUTPUT_DIR}です。 -ix -com.vladium.*パラメータに注意してください。これはEmmaクラスを除外しています