Wenn ich versuche zu bauen, bekomme ich diesen Stacktrace:
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)
Ich habe die CheckListPresenter
-Klasse überprüft und scheint keine Probleme zu haben. Ich habe versucht, die Klasse zu löschen, nur um zu sehen, ob sie erstellt werden würde, aber der Fehler wurde in einer anderen Klasse fortgesetzt, die dasselbe Problem angibt.
Das letzte Mal, als ich diesen Code berührt habe, war vor einigen Monaten, daher bin ich mir nicht sicher, was die Änderung ausgelöst hat.
Dinge, die wichtig sein können: Dies ist ein Android-Projekt. Dies ist in Kotlin geschrieben. Dies schlägt bei der Gradle-Task transformClassesWithDesugarForDebug
fehl
Das sind alles nur Stiche im Dunkeln, die ich versucht habe:
Ein neues Projekt erstellen und nur meinen Quellcode und meine Gradle-Dateien einziehen.
Löschen von Java 8 auf 7.
Andere Version von JDK. Ich habe 1.8.0_151 und 1.8.0_152 ausprobiert.
javaMaxHeapSize "4g"
zu build.gradle hinzufügen.
Alles aufrüsten: gradle Wrapper und jede Abhängigkeit.
Dolch zugunsten von Koin entfernt
Kapt entfernt
Verwendet sowohl die Preview- als auch die Stable-Version von Android Studio
Hier ist mein Build-Scan für was es gut ist
Dies ist der Codeausschnitt, der mich umbringt:
view?.let { v ->
v.getCancelClicks()
.doOnSubscribe({ disposables.add(it) })
.subscribe({
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}, this::onError)
}
Was seltsam ist, ist keiner von diesen allein wird mir Probleme geben
view?.let { v ->
v.getCancelClicks()
.doOnSubscribe({ disposables.add(it) })
.subscribe({
//removed
}, this::onError)
}
}
oder
view?.let { v ->
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}
Aber zusammen sind sie ein Problem.
Etwas anderes ist view
, das in der Basisklasse definiert ist und generisch ist.
Derzeit ist es meine Aufgabe, view?.let{
zu entfernen und einfach view!!
zu verwenden. Dies ist offensichtlich ein Fehler, aber ich bin nicht sicher, wem er dies melden soll. Gradle, Kotlin, JetBrains, Gott?
Das Problem wurde durch das Hinzufügen von Android.enableD8.desugaring = true
zu gradle.properties
behoben.
Das Problem ist hier unter https://issuetracker.google.com/issues/72750890 ..__ abgelegt. Beide dort genannten Lösungen funktionierten für mich: Hinzufügen von classpath 'com.Android.tools.build:gradle:3.0.1'
zu build.gradle oder Hinzufügen von Android.enableD8.desugaring=true
zu gradle.properties
Ich habe eine Möglichkeit, diesen Fehler zu umgehen: 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
.
Verschieben Sie einfach diesen Blockcode
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
oo andere Methode. Ich begegne diesem Problem nicht mehr. Ich hoffe, dies wird dir helfen.
Als Problemumgehung können Sie let
durch eine Nullprüfung ersetzen. Zumindest der Code wurde danach kompiliert
if (view!=null)
view.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}