Gradle Build Failure: не удалось найти внешний класс

Когда я пытаюсь построить, я получаю эту стек:

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. Это написано в Котлине. Это не будет работать на transformClassesWithDesugarForDebug Gradle задачи


Правки

Все это просто удары в темноте, которые я пробовал:

  • Создание нового проекта и перемещение только в моем исходном коде и файлах градиента.

  • Удаление из java 8 до 7.

  • Разная версия JDK. Я пробовал 1.8.0_151 и 1.8.0_152.

  • Добавление javaMaxHeapSize "4g" для сборки.gradle.

  • Обновление всего: обертка графа и каждая зависимость.

  • Удаленный кинжал в пользу Коина

  • Удалено 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!! , Это, очевидно, ошибка, но я не уверен, кому сообщить об этом. Gradle, Kotlin, JetBrains, Бог?

Ответ 1

Проблема разрешилась, когда я добавил android.enableD8.desugaring = true в gradle.properties

Ответ 2

У меня есть способ обойти эту ошибку: 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 другой метод. Я больше не встречаюсь с этой проблемой. Я надеюсь, что это поможет вам.

Ответ 3

Проблема отправлена здесь https://issuetracker.google.com/issues/72750890. Оба упомянутых там решения работали для меня: добавление classpath 'com.android.tools.build:gradle:3.0.1' для сборки.gradle или добавления android.enableD8.desugaring=true для gradle.properties

Ответ 4

В качестве обходного пути вы можете заменить let путем нулевой проверки. По крайней мере, код начал компилироваться после этого

if (view!=null)
    view.showExitDialog()
        .filter { it }
        .subscribe({
           cancel()
        }, this::onError)
}

Ответ 5

У меня была та же проблема, и она была связана с библиотекой, которая имела нефиксированную версию, то есть: (2.2. +), И все внезапно обновлялось, и затем мой проект начал иметь "" главную "java.lang.NullPointerException: Couldn ' не могу найти внешний...--> здесь у меня был затронутый класс, чтобы я мог обнаружить lib с проблемой "

Надеюсь, это поможет.