En essayant de construire, j'obtiens ce 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)
J'ai vérifié la classe CheckListPresenter
et il ne semble pas y avoir de problèmes. J'ai essayé de supprimer la classe juste pour voir si elle se construirait, mais l'erreur vient de passer à une autre classe énonçant le même problème.
La dernière fois que j'ai abordé ce code, c'était il y a quelques mois, je ne suis donc pas sûr de ce qui a déclenché le changement.
Choses qui peuvent compter: Ceci est un projet Android. Ceci est écrit en Kotlin. Cela échoue dans la tâche transformClassesWithDesugarForDebug
gradle
Ce ne sont que des coups de poignard dans le noir que j'ai essayé:
Créer un nouveau projet et ne déplacer que mon code source et mes fichiers de classement.
Passer de Java 8 à 7.
Version différente de JDK. J'ai essayé 1.8.0_151 et 1.8.0_152.
Ajout de javaMaxHeapSize "4g"
à build.gradle.
Tout mettre à niveau: gradle wrapper et chaque dépendance.
Supprimé Dague en faveur de Koin
Kapt supprimé
Utilisé à la fois les versions Preview et Stable d'Android Studio
Voici mon build scan à quoi bon ça va faire
C'est l'extrait de code qui me tue:
view?.let { v ->
v.getCancelClicks()
.doOnSubscribe({ disposables.add(it) })
.subscribe({
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}, this::onError)
}
Ce qui est étrange, est que ni l'un ni l'autre seul ne me posera de problèmes
view?.let { v ->
v.getCancelClicks()
.doOnSubscribe({ disposables.add(it) })
.subscribe({
//removed
}, this::onError)
}
}
ou
view?.let { v ->
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}
Mais ensemble ils sont un problème.
Une autre chose à noter, view
, est définie dans la classe de base et est un générique.
Actuellement, mon travail consiste à supprimer view?.let{
et à utiliser simplement view!!
. C’est évidemment un bug, mais je ne sais pas à qui le signaler. Gradle, Kotlin, JetBrains, Dieu?
Le problème s'est résolu quand j'ai ajouté Android.enableD8.desugaring = true
à gradle.properties
J'ai un moyen de contourner cette erreur: 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
.
Il suffit de déplacer ce code
v.showExitDialog()
.filter { it }
.subscribe({
cancel()
oo autre méthode. Je ne rencontre plus ce problème. J'espère que cela t'aidera.
En guise de solution de contournement, vous pouvez remplacer let
par une vérification nulle. Au moins le code a commencé à compiler après cela
if (view!=null)
view.showExitDialog()
.filter { it }
.subscribe({
cancel()
}, this::onError)
}