【问题标题】:Android, emma, ant, and ant-related errorsAndroid、emma、ant 和 ant 相关的错误
【发布时间】:2011-06-09 01:04:44
【问题描述】:

我正在使用其他开发人员创建的一些 Android 代码,他们要求我对其运行代码覆盖率指标。它是 Android 2.3.3,他们使用 ant 作为构建文件。我在 Ubuntu 上运行,而其他开发人员在 windows/macs 上运行。

如果我不理会 SDK/tools/lib/ant/main_rules.xml 文件,我会遇到 emma 的 sourceforge 页面中描述的错误:找不到类 com.vladium.emma.emmajavaTask 所需的类:org /apache/tools/ant/taskdefs/Java"

这显然是由于 lib 目录中同时包含 emma_ant.jar 和 emma.jar 造成的。不用说,没有提到 emma_device.jar。

如果我注释掉寻找 emma.jar 的行,我可以构建项目。然而,当需要创建一个测试项目来获取检测代码时,运行“ant coverage”会返回

Problem: failed to create task or type emma
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

这让我陷入困境。它似乎在寻找 emma_properties.config 文件,但这似乎只在 emma.jar 中,被注释掉了......

我觉得我在兜圈子,一无所获。任何帮助表示赞赏。

【问题讨论】:

    标签: android ant emma


    【解决方案1】:

    我认为使用 ant 获得 EMMA 覆盖率并不容易,但使用 make 并没有那么复杂。首先你需要设置

    EMMA_INSTRUMENT=true
    

    在您的环境中创建检测构建,然后使用 make 构建您的应用和测试,然后使用运行检测

    -e coverage 'true'
    

    我即将出版的书Android Application Testing Guide 包含一个使用此技术获取覆盖率报告的分步示例,如下所示:

    【讨论】:

    • 迭戈,我非常忠实地阅读了您的博客,并且正在等待您的书。我的问题是双重的: 1.“环境”意味着在 .bashrc 中设置变量,对吗? 2. 你在说哪个“make”命令?虽然我以前使用 Eclipse 自动构建了一些东西,但我不能在这里使用它。我对 java 基础设施的了解不够,无法知道 make 是 javac 还是其他东西。
    • ant 覆盖率通常会给我一些构建项目时令人讨厌的编译器错误,但使用完全相同的源和制作时这些错误并不存在。但您的里程可能会有所不同。
    • 我从“使用 makefile 构建 C/C++ 中识别出 make,但由于这是一个 java/android 应用程序,我正在尝试更接近 javac 的东西。我确定你可以创建一个makefile 来调用 javac 等,但与大多数事情一样,这是“另一种方法”。:)
    【解决方案2】:

    将此问题的答案视为“在不了解其含义的情况下尝试做太多事情”的案例。

    EMMA 的 sourceforge 页面建议安装 emma.jar 作为 JRE 的扩展。如果这样做,将导致与 SDK ant 工具发生冲突。最安全的做法是忽略 EMMA sourceforge 单独构建,只使用 SDK 为您提供的内容。在测试部分下的http://developer.android.com 可以找到有关使其工作的说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2014-05-21
      相关资源
      最近更新 更多