7

Java と C/JNI コードを組み合わせた Android プロジェクトのテストで Emma を実行しようとしています。ビルドとテストは問題なく動作しますが、 を追加するたびにemma不可解な例外が発生します。Android SDK v20.1 と NDK r8b を使用しています。

プロジェクトはこちら、Android ライブラリ プロジェクト: https://github.com/guardianproject/IOCipher 、テストはこちら: https://github.com/guardianproject/IOCipherTests

build.xmlファイルはandroid update test-project. 例外をトリガーしている間、実行ant clean debug install testは常に機能します。ant clean emma debug install test

例外は次のとおりです。

-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
4

2 に答える 2

0

コマンド ラインから Android APK プロジェクトをビルドします (ant は使用しませんが、CMake を使用します。これはここでは重要ではないと思います)。同じエラーが発生しました。次の 2 つのことが役に立ちました。

  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 クラスを除外します

于 2015-03-10T09:56:05.487 に答える