android - RxJavaPlugins 错误找不到类 "com.google.devtools.build.android.desugar.runtime.ThrowableExtension"

标签 android android-gradle-plugin rx-java2 android-studio-3.0

升级 Android Studio 3.0 Beta 1 后出现以下错误。 当我降级时,错误消失了。

Studio 构建:Android Studio 3.0 Beta 1 Gradle 插件版本:'com.android.tools.build:gradle:3.0.0-beta1' Gradle 版本:.0.0-beta1 Java 版本:8 操作系统:MacOSX

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/devtools/build/android/desugar/runtime/ThrowableExtension;
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:364)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:113)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Caused by: java.lang.ClassNotFoundException: 
Didn't find class "com.google.devtools.build.android.desugar.runtime.ThrowableExtension" on path: DexPathList[[zip file "/data/app/sark.savvy.Debug-1/base.apk",
 zip file "/data/app/sark.savvy.Debug-1/split_lib_dependencies_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_0_apk.apk",
  zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_1_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_2_apk.apk",
   zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_3_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_4_apk.apk", 
   zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_5_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_6_apk.apk",
    zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_7_apk.apk", zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_8_apk.apk",
     zip file "/data/app/sark.savvy.Debug-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/sark.savvy.Debug-1/lib/arm64, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:364) 
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:113) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 

最佳答案

更新(仍在使用 Gradle 插件 3.0.0-beta5,由 @TmTron 确认)

classpath 'com.android.tools.build:gradle:3.0.0-beta5'

更新(在 Gradle 插件 3.0.0-beta4 中修复)

在 Gradle 插件 3.0.0-beta4 中再次修复了该问题。预计将包含在下一个 AS 3.0 Beta 4 中,但通过更新顶级 build.gradle 已经可以在当前的 AS 3.0 Beta 3 中使用:

classpath 'com.android.tools.build:gradle:3.0.0-beta4'

更新(AS 3.0 Beta 3 中的回归)

这个问题又回到了 beta 3。Google 已经意识到这个问题并重新打开了它。见 https://issuetracker.google.com/issues/64527520

在未来的 beta 4 中修复,等待发布。

感谢@yvolk 的报告和@ghui-zhang 的确认。


最终更新(在 AS 3.0 Beta 2 中修复)

正如 Jordan Bondo 在评论中所说,AS 3.0 Beta 2 已经发布,其中包含修复该问题的插件 3.0.0-beta2。

因此,解决方案是将插件从 3.0.0-beta1 升级到至少 3.0.0-beta2。


历史

Google 在此问题中以 P0 优先级(这是最高优先级)处理此问题:https://issuetracker.google.com/issues/64527520

与此同时,@edgars 解决方法为我解决了问题。谢谢!

更新 2:已修复,计划下一个测试版 "Fix will land in plugin 3.0.0-beta2"

更新:additional workaround由 Google 员工分享:

Temporary workaround is to set min sdk version below 19. Issue is that Desugar will process try-with-resources for API 19+, although platform supports it, but we will not package those classes.

更新 3:如果不在 Java 代码中使用 Java 8 功能,请禁用它(这对 Kotlin 代码库也很有用)。见 this comment .

关于android - RxJavaPlugins 错误找不到类 "com.google.devtools.build.android.desugar.runtime.ThrowableExtension",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604099/

相关文章:

android - ButterKnife - 找不到 Gradle DSL 方法 apt()

java - 取消订阅 Single 的正确方法是什么

join - 两个有序可观察量的完全外连接

android - Kotlin 在使用 RxJava2 时错误地推断类型可空性

android - 订阅 channel 并以编程方式喜欢/喜欢YouTube视频

android - iOS 和 Android 中 WebView 的总缓存大小是多少?

java - 在我的应用程序中膨胀类 android.support.design.widget.NavigationView 时出错

android - 在Android 4.0.3中插入错误SqLite

android - 如果没有 @Inject 构造函数或 @Provides 注释方法,则无法提供 Dagger 类

android - 在 Android Studio v 0.5.7 中禁用按需配置