NonExistentClass не может быть преобразован в аннотацию - PullRequest
0 голосов
/ 07 февраля 2019

Я добавил новый интерфейс Retrofit в свой проект, содержащий несколько конечных точек, аннотированных аннотациями @GET и @HEADERS, после внедрения указанного интерфейса в класс репозитория с использованием аннотации @Inject в конструкторе указанного класса,Android Studio выдает эту ошибку:

NonExistentClass cannot be converted to Annotation

После просмотра сгенерированного кода Java он заменяет аннотации @GET и @HEADERS следующим:

@error.NonExistentClass()

I 'мы уже попробовали следующее:

  • Использование annotatioProcessor вместо kapt

  • Настройка jetifier.enabled на false in gradle.properties

  • Настройка generateStubs до true в моем build.gradle файле

  • Настройка correctErrorTypes до true в моем build.gradle файл

Я использую:

  • Android Studio 3.3

  • Котлин 1.3.11

  • Кинжал 2,21

  • Модернизация 2.3.0

  • Котлин

  • Kapt

это может бытькакая-то проблема с кинжалом?или Retrofit / dagger не полностью совместим с новыми версиями плагина Kapt?

1 Ответ

0 голосов
/ 22 марта 2019

К счастью, этот вопрос заставил меня понять мою проблему.При перемещении классов из модуля приложения в библиотеку я ссылался на класс аннотации, который существовал только в папке отладки.Таким образом, отладочные сборки были в порядке, но вызовы gradlew install не сработали при создании файлов выпуска.

Ошибка для меня была очень явной, хотя мне потребовалось много времени, чтобы понять - сгенерированный файл буквально заменил отсутствующую аннотацию на @error.NonExistentClass()

Перемещение файла в основной набор srcозначает, что как отладочные, так и релизные сборки могут видеть класс.Мне потребовалось некоторое время, чтобы понять, что я предположил, что это проблема Кинжала, маскируемая Каптом, но на самом деле это была просто старая проблема Кинжала.Мой совет - внимательно посмотрите на настройку вашего кинжала.

...