Символ GlideApp не найден в Android Studio 4.1

Я уже некоторое время использую Glide 4.11.0 и Realm 6.0.2 и недавно обновил Android Studio 4.0.x до 4.1. Все идет хорошо. Сегодня запустил lint checker, начал чистить, ничего необычного (казалось бы). Одной из вещей, которые я много сделал, была замена операторов switch, которые тестировались на R.id. с операторами if-else согласно предупреждению о том, что произойдет в Gradle 5.0.

Когда я сделал это, я использовал несколько переменных int, которые я назвал «id», которые должны были заменить значение для сравнения, то есть вместо оператора switch, который был бы:

switch (menuOpt.getId()) {
    case R.id.xxx:
        ...
}

Я бы сделал:

int id = menuOpt.getId();
if ( id == R.id.XXX) {
} else if....

согласно новым рекомендациям. Внезапно при полной сборке AS жалуется, что больше не распознает GlideApp, и я также получаю очень странное сообщение о том, что Realm не может правильно обрабатывать:

C:\BLD\AndroidStudioProjects\InTouch\app\src\main\java\com\reddragon\intouch\ui\MediaPlayerActivity.java:61: error: cannot find symbol
import com.reddragon.intouch.utils.GlideApp;
                                  ^
  symbol:   class GlideApp
  location: package com.reddragon.intouch.utils
C:\BLD\AndroidStudioProjects\InTouch\app\src\main\java\com\reddragon\intouch\ui\MediaDialogActivity.java:92: error: cannot find symbol
import com.reddragon.intouch.utils.GlideApp;
                                  ^
  symbol:   class GlideApp
  location: package com.reddragon.intouch.utils
C:\BLD\AndroidStudioProjects\InTouch\app\src\main\java\com\reddragon\intouch\ui\MediaListActivity.java:48: error: cannot find symbol
import com.reddragon.intouch.utils.GlideApp;
                                  ^
  symbol:   class GlideApp
  location: package com.reddragon.intouch.utils
Note: Version 10.0.0 of Realm is now available: https://static.realm.io/downloads/java/latest
Note: Processing class Album
error: Class "Album" contains illegal final field "id".
Note: [1] Wrote GeneratedAppGlideModule with: []
Class "Album" contains illegal final field "id".

4 errors

У меня было поле «id» в моем классе «Альбом» около 2 лет без проблем!

Никакой способ перестроения, аннулирования кеша и перезапуска, синхронизации файлов gradle или перезагрузки всего с диска, похоже, не помогает.

На самом деле, если я аннулирую и перезапущу, я не получу красную волнистую линию в классах-нарушителях, которые ссылаются на GlideApp, но как только я начну запускать приложение и оно пройдет процесс сборки, оно выдаст ошибку.

Я немного погуглил и нашел один пост, в котором, казалось, был какой-то конфликт между Realm и Glide (RequestOptions), но мне странно, почему это вдруг начало происходить?

Я проверил, что класс GlideAppjava фактически создается — я использую вариант сборки отладки, и я вижу в файловой системе GlideApp.java, который находится в каталоге ap_generated_sources/debug в соответствующем пакете, где у меня есть мой класс, который расширяет AppGlideModule с помощью аннотации @GlideModule.

Итак, GlideApp генерируется. Его просто не узнают.

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

Так расстраивает! Любая помощь приветствуется.


person tfrysinger    schedule 27.10.2020    source источник


Ответы (1)


Оказывается, ответ был направлен прямо на меня, хотя и несколько скрыт: часть проверки, которую я сделал, заключалась в том, чтобы принять некоторые предложения о том, чтобы сделать переменные «финальными», включая те, которые используются в классах Realm для определения объектов Realm. Realm это не нравится — приведенный выше вывод об ошибке сборки включает в качестве последней строки утверждение «Альбом класса содержит недопустимый идентификатор конечного поля».

Альбом расширяет RealmObject, и виновником было автоматическое принятие предложения lint сделать некоторые поля окончательными.

Я думаю, что эта проблема с Realm каким-то образом вызвала волновой эффект с другой обработкой аннотаций - когда я вернулся ко всем классам RealmObject и удалил окончательное объявление, сборка теперь завершается гладко.

person tfrysinger    schedule 27.10.2020