Android Studio Desugar:使用 Desugar 转换类以进行调试失败

Posted

技术标签:

【中文标题】Android Studio Desugar:使用 Desugar 转换类以进行调试失败【英文标题】:Android Studio Desugar: Transform Classes with Desugar for Debug fails 【发布时间】:2018-04-27 19:00:43 【问题描述】:

我的 android Studio 项目最近停止正常构建。我不知道是什么导致了这个问题。

这是我尝试过的

我尝试使用不同的 Android Studio 版本构建我的项目,即稳定和不同的 Canary 通道版本,没有变化 我更改了 SDK 版本。我的项目使用 SDK 26 正确构建,但现在不能,也不能使用 SDK 27 我交换了构建工具和 Gradle 版本,我的项目使用 Gradle 插件 3.1.0-alpha2 和构建工具版本 26.0.2 正确构建。我尝试了很多 我在Android Studio中无数次使用了“Clean Project”“Invalidate Caches”...函数 我删除了我的构建文件夹 我打开和关闭了 Proguard 我尝试修复可能的库问题,但都无济于事

我想我实际上将所有内容都改回了我之前成功使用的设置,而我的其他具有类似设置的项目构建良好。

完整的错误代码:

Error:java.lang.RuntimeException: com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments @...\app\build\intermediates\tmp\desugar_args165654356027684238

Error:com.android.build.api.transform.TransformException: java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments @...\app\build\intermediates\tmp\desugar_args165654356027684238
Error:java.lang.RuntimeException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments @...\app\build\intermediates\tmp\desugar_args165654356027684238
Error:java.lang.RuntimeException: com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments @...\app\build\intermediates\tmp\desugar_args165654356027684238
Error:com.android.ide.common.process.ProcessException: Error while executing java process with main class com.google.devtools.build.android.desugar.Desugar with arguments @...\app\build\intermediates\tmp\desugar_args165654356027684238

Error:org.gradle.process.internal.ExecException: Process 'command '...\jre\bin\java.exe'' finished with non-zero exit value 1

问题描述

我不知道是什么(have) 导致(d) 这个问题,而且我不知道接下来要尝试什么,这就是我向您寻求帮助的原因。除了我能找到的以外,我希望有人能提供任何其他帮助。

我标记了 Firebase,因为我认为该库可能是我的问题的关键点,现在的问题是它永远无法解释 突然停止。我在我的应用程序中使用 FirebaseUI 并尝试了旧的工作依赖项,但也升级了 Firebase,然后使用 this guide 匹配过时的 UI 库。我还删除了 FirebaseUI,但这并没有成功构建。

【问题讨论】:

从外观上看,您使用的是 alpha 版本。尝试安装一个稳定的版本,看看它是否仍然会出现同样的问题。 @Zoe,第一个要点指出他们也在使用稳定版本。 发布你的 build.gradle 我们团队的一名成员莫名其妙地开始发生这种情况,尽管同一项目的其他几个开发人员没有受到影响。他当时在 Windows 上,最终发现他可以通过降级播放服务来解决问题。不幸的是,他唯一的永久解决方案是回到 Linux。 :( 感受你的痛苦!看起来这个问题与firebase无关,没有它的项目也有类似的问题。 【参考方案1】:

对我来说,它恰好是我正在使用的 Leanplum 库的版本——虽然我无法通过 gradle 显示错误,但我很恼火,在 bazel 中找到了 Desugar sources,构建它,然后从我失败的 gradle 构建中复制命令行参数,这导致我进入 Leanplum jar,它似乎在两个不同的混淆元素之间存在名称冲突:

Exception in thread "main" java.lang.IllegalStateException: Already recorded as class: com/leanplum/a/x
    at com.google.common.base.Preconditions.checkState(Preconditions.java:582)
    at com.google.devtools.build.android.desugar.ClassVsInterface.addKnownInterfaces(ClassVsInterface.java:46)
    at com.google.devtools.build.android.desugar.InterfaceDesugaring.visit(InterfaceDesugaring.java:96)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:621)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:500)
    at com.google.devtools.build.android.desugar.Desugar.desugarClassesInInput(Desugar.java:477)
    at com.google.devtools.build.android.desugar.Desugar.desugarOneInput(Desugar.java:361)
    at com.google.devtools.build.android.desugar.Desugar.desugar(Desugar.java:314)
    at com.google.devtools.build.android.desugar.Desugar.main(Desugar.java:711)

我认为这对我有用,因为较新版本的 Desugar 有更好的错误报告......所以如果像我一样你无法弄清楚发生了什么,有可能

installing bazel(我在mac上用自制软件) 然后构建您自己的 Desugar 版本(我在 bazel 存储库的根目录中使用的命令是 bazel build //src/tools/android/java/com/google/devtools/build/android/desugar:Desugar), 然后从失败的 gradle 构建中复制并粘贴 CLI 参数将导致洞察力。 (命令最终看起来像这样:path/to/your/built/Desugar --verbose --input /Users/you/yourApp/app/build/intermediates/transforms/stackFramesFixer/envDev/debug/109.jar .... --desugar_try_with_resources_if_needed --desugar_try_with_resources_omit_runtime_classes

我原以为必须将自己的错误日志记录添加到 Desugar 中才能捕捉到这一点,但很高兴这是不必要的。

【讨论】:

感谢详细步骤。它使我能够查明我在播放服务库冲突中的问题 @mbonnin,我面临着与leanplum完全相同的问题。你是怎么解决的? 不记得具体细节,但我按照 Eric 的建议做了,并且在日志中显示了冲突的库。【参考方案2】:

在我的情况下,是 java 版本导致了问题。当我在 libs 中添加一个 SDK jar 并且我知道 SDK 与我们的 java 版本 1.8 不兼容时,错误开始出现。使用 java 8 解决了更新的 SDK jar。

【讨论】:

【参考方案3】:

我最近在使用 AS 3.1.4 和 Gradle 4.4 时遇到了同样的问题。我不完全理解这个问题的原因,但对我来说它似乎与自定义模块的编译有关

我解决了它,将我的自定义模块作为 jar 依赖项导入,而不是“编译”它。

简而言之:

在您的 app.gradle 文件中,将以下行注释为: 实施项目(路径:':XXX') 打开 app->打开模块设置->依赖项 并将您的 Jar 添加为模块依赖项

【讨论】:

Matteo,这只是添加了我刚刚注释掉的 implementation project(':XYZ') 语句。【参考方案4】:

您是否尝试使用和清除 AS 2.3 中引入的构建缓存?

例如,我的 gradle.properties 有

android.enableBuildCache=true
android.buildCacheDir=/tmp/android-build-cache

我必须清除 /tmp/android-build-cache 才能修复我遇到的同样的 Desugar 错误。

【讨论】:

您能详细说明一下吗?我没有完全理解你的意思,this 对我没有多大帮助。我清除了我能找到的所有构建和缓存部分,但我无法做出任何改变。 来自文档:默认情况下,Android 插件会将缓存保存在 /.android/build-cache/ 中。所以,如果你有东西,请尝试删除它。【参考方案5】:

我修复了它(和another Kotlin related issue,只是从我的计算机上完全擦除所有与 Android 和 Gradle 相关的东西,然后从头开始安装所有东西。整个过程是一种折磨,所以我仍然热衷于快速解决方案。我不想再花几个小时在这上面:)

【讨论】:

在我的情况下文件 -> 使缓存无效/重新启动已解决的问题。【参考方案6】:

在我们的例子中,构建机器上的内存不足。

【讨论】:

以上是关于Android Studio Desugar:使用 Desugar 转换类以进行调试失败的主要内容,如果未能解决你的问题,请参考以下文章

android studio 怎么用arr

android studio冲突对比怎么用

android studio 代码出现删除线如何更换

第三章:使用 Android Studio 编程[Learn Android Studio 汉化教程]

android studio添加本地 图片

android studio的使用