尝试构建时,我得到了这个堆栈跟踪:
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。 - 在build.gradle中添加
javaMaxHeapSize“4g”
。
- 升级所有内容:gradle包装器和每个依赖项。
- 放弃Dagger,改为使用Koin。
- 删除Kapt。
- 使用Android Studio的预览版和稳定版。这是我的构建扫描,希望对您有所帮助。
新发现:
这是让我烦恼的代码片段:
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!!
。这显然是一个bug,但我不确定要向谁报告。Gradle、Kotlin、JetBrains、上帝?