将'emma'添加到Android ant build会触发“局部变量类型不匹配”异常

时间:2012-08-30 19:10:28

标签: android ant emma

我正在尝试在针对Android项目的测试上运行Emma,该项目是Java和C / JNI代码的组合。构建和测试工作正常,但每当我添加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

2 个答案:

答案 0 :(得分:3)

我得到了同样的错误。在我的项目中,我们在一个项目中有一个单元测试应用程序,它包含另一个包含单元测试的项目。这两个项目都引用了我的SDK,正如chaitanya建议的那样,它导致emma两次检测SDK代码。通过删除单元测试项目中对SDK的引用,我能够解决错误。

答案 1 :(得分:0)

我从命令行构建Android APK项目(没有ant,但是在CMake的帮助下。我猜这在这里并不重要)我遇到了同样的错误,有两件事帮助了我:

  1. here,我得到的信息是&#34;如果您检测具有本地变量调试信息的类文件,则emma无法正确维护本地变量表。当您尝试转换Android的类文件时,这将导致错误。解决此问题的方法是仅使用行和源调试信息编译java类,而不是本地信息。&#34; ,所以我向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.*参数,这不包括艾玛课程