【问题标题】:Android JAVA Byte Code missing after update Gradle and Build Tools更新 Gradle 和构建工具后缺少 Android JAVA 字节码
【发布时间】:2018-11-19 12:29:53
【问题描述】:

我正在使用 Jacoco 创建覆盖率报告,并且在更新 Gradle 和 BuildTools 版本之前工作正常。然后我恢复这些更改并再次工作。

Jacoco 在此处查找 .class 文件:

${buildDir}/intermediates/classes/debug

这是 app/build/intermediates/classes/debug。但我注意到升级后路径丢失,intermediates

内没有 classes 目录

我的配置正在运行:

项目级模块

classpath 'com.android.tools.build:gradle:3.1.4'
classpath 'io.fabric.tools:gradle:1.25.1'

应用级模块

compileSdkVersion 27
buildToolsVersion "27.0.3"

当更新是这个:

项目级模块

classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'io.fabric.tools:gradle:1.25.4'

应用级模块

compileSdkVersion 28
buildToolsVersion "28.0.3"

我找不到有关正在移动的路径或可能发生的情况的任何参考

编辑

我的问题是,由于 Java 字节码(生成的 .class 文件)不存在,所以 Jacoco 无法创建覆盖率报告

【问题讨论】:

  • 有人吗?有没有其他人遇到同样的问题?

标签: android gradle code-coverage jacoco


【解决方案1】:

他们在intermediates\javac\debug\compileDebugJavaWithJavac\classes

您可以配置 Jacoco 以更改类路径。

我不熟悉 Jacoco,但我认为它有一个名为 includes 的属性,用于 .class 文件。

或者我猜应该有一个.properties

【讨论】:

  • 谢谢!你知道他们为什么搬到哪里去吗?还有,有没有关于它的文档?
  • @sebasira 我找不到任何文档,但我猜它是用于清理和组织目录以供将来开发。由于android即将结束并被Fuchsia取代,而Flutter框架将与Dart而不是Java一起使用,我猜他们正在为此准备环境。
【解决方案2】:

可以像这样更改覆盖任务使用的classDirectories

task "${testTaskName}Coverage" (type:JacocoReport, dependsOn: "$testTaskName") {
    ...
    classDirectories = fileTree(
        dir: "${project.buildDir}/intermediates/javac/debug/compileDebugJavaWithJavac/classes/${sourcePath}",
        excludes: [ ... ]
    )
    ...
}

【讨论】:

  • 谢谢!虽然你的回答也是正确的,但我不得不将@MDP 标记为正确的,因为他回答得较早。
  • @sebasira 另一个答案没有提供如何更改路径的任何解决方案。而您的“问题”甚至不包含任何实际问题 - 需要判断哪个答案是正确的。更快的答案并不意味着更好的答案。用于模式 *.class 的 IDE 函数 search > in path 将提供相同的信息。
  • 基本上,当询问“还有其他人遇到同样的问题吗?”时,“不清楚你在问什么”(这通常是搁置问题的好理由)。 - 这可能意味着a)“.class文件位于哪里?” b)“如何更改路径,以便 JaCoCo 找到 .class 文件?” ...因此有两个答案,它们回答了完全不同的问题。
猜你喜欢
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 2011-10-16
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多