Gradle Build Failure:无法找到外部类

Cha*_*ham 12 gradle kotlin android-gradle-plugin

在尝试构建时,我得到了这个堆栈跟踪:

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)
Run Code Online (Sandbox Code Playgroud)

我检查了CheckListPresenter课程,似乎没有任何问题.我尝试删除该类只是为了看它是否会构建,但错误只是转移到另一个类,说明相同的问题.

几个月前我最后一次触摸这段代码是好的,所以我不确定是什么触发了这一变化.

可能重要的事情:这是一个Android项目.这是用Kotlin写的.这在transformClassesWithDesugarForDebuggradle任务上失败


编辑

这些都只是在我尝试的黑暗中刺伤:

  • 创建一个新项目并仅移入我的源代码和gradle文件.

  • 从java 8到7.

  • 不同版本的JDK.我试过1.8.0_151和1.8.0_152.

  • 添加javaMaxHeapSize "4g"到build.gradle.

  • 升级所有内容: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)
    }
Run Code Online (Sandbox Code Playgroud)

令人感到奇怪的是,这些没有一个单独给我的问题

view?.let { v ->
    v.getCancelClicks()
        .doOnSubscribe({ disposables.add(it) })
        .subscribe({
            //removed 
         }, this::onError)
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

view?.let { v ->
    v.showExitDialog()
        .filter { it }
        .subscribe({
           cancel()
        }, this::onError)
 }
Run Code Online (Sandbox Code Playgroud)

但他们在一起是个问题.

其他注意事项,view在基类中定义,是一个通用的.

目前,我的工作是删除view?.let{和使用view!!.这显然是一个错误,但我不确定将其报告给谁.Gradle,Kotlin,JetBrains,上帝?

小智 10

当我添加android.enableD8.desugaring = true到时,问题自行解决了gradle.properties


小智 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()
Run Code Online (Sandbox Code Playgroud)

其他方法。我不再遇到这个问题了。我希望这能帮到您。