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 插件会将缓存保存在我修复了它(和another Kotlin related issue,只是从我的计算机上完全擦除所有与 Android 和 Gradle 相关的东西,然后从头开始安装所有东西。整个过程是一种折磨,所以我仍然热衷于快速解决方案。我不想再花几个小时在这上面:)
【讨论】:
在我的情况下文件 -> 使缓存无效/重新启动已解决的问题。【参考方案6】:在我们的例子中,构建机器上的内存不足。
【讨论】:
以上是关于Android Studio Desugar:使用 Desugar 转换类以进行调试失败的主要内容,如果未能解决你的问题,请参考以下文章