在尝试构建时,我得到了这个堆栈跟踪:
Exception in thread "main" java.lang.NullPointerException: Couldn't find outer class com/xxx/CheckListPresenter$onAttached$1$5 of com/xxx/CheckListPresenter$onAttached$1$5$1
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:1079)
at com.google.devtools.build.android.desugar.ClassVsInterface.isOuterInterface(ClassVsInterface.java:56)
at com.google.devtools.build.android.desugar.InterfaceDesugaring.visitOuterClass(InterfaceDesugaring.java:246)
at org.objectweb.asm.ClassReader.accept(ClassReader.java:638)
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)
我查看了CheckListPresenter
课程,但似乎没有任何问题。我尝试删除该类只是为了看它是否会构建,但错误只是转移到另一个类,说明相同的问题。
几个月前我最后一次触摸这段代码是好事,所以我不确定是什么引发了这一变化。
可能重要的事情:这是一个Android项目。这是用Kotlin写的。这在transformClassesWithDesugarForDebug
gradle任务
这些都是我试过的黑暗中的刺伤:
创建新项目并仅移入我的源代码和gradle文件。
从java 8删除到7.
不同版本的JDK。我试过1.8.0_151和1.8.0_152。
将javaMaxHeapSize "4g"
添加到build.gradle。
升级所有内容:gradle包装器和每个依赖项。
删除Dagger以支持Koin
删除了Kapt
同时使用Android Studio的预览版和稳定版
这是我build scan的好处
这是杀死我的代码片段:
view?.let { v ->
v.getCancelClicks()
.doOnSubscribe({ disposables.add(it) })
.subscribe({
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}, this::onError)
}
有什么奇怪的,这些中没有一个会给我带来问题
view?.let { v ->
v.getCancelClicks()
.doOnSubscribe({ disposables.add(it) })
.subscribe({
//removed
}, this::onError)
}
}
或
view?.let { v ->
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}
但在一起他们是个问题。
需要注意的是,view
在基类中定义,并且是通用的。
目前,我的工作是删除view?.let{
并使用view!!
。这显然是一个错误,但我不确定将其报告给谁。 Gradle,Kotlin,JetBrains,上帝?
答案 0 :(得分:7)
当我将android.enableD8.desugaring = true
添加到gradle.properties
答案 1 :(得分:1)
我有办法解决此错误:java.lang.NullPointerException: Couldn't find outer class com/iconfitness/iconaudit/common/fragments/SettingsFragment$onCreate$1$1 of com/iconfitness/iconaudit/common/fragments/SettingsFragment$onCreate$1$1$1
。
移动此块代码
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
oo其他方法。我不再遇到这个问题了。我希望这会对你有所帮助。
答案 2 :(得分:1)
问题在此处https://issuetracker.google.com/issues/72750890中提出。
那里提到的两种解决方案都对我有用:
将classpath 'com.android.tools.build:gradle:3.0.1'
添加到build.gradle或将android.enableD8.desugaring=true
添加到gradle.properties
答案 3 :(得分:0)
作为解决方法,您可以用空检查代替let
。此后至少开始编译代码
if (view!=null)
view.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}