【问题标题】:GlideApp symbol not found in Android Studio 4.1在 Android Studio 4.1 中找不到 GlideApp 符号
【发布时间】:2020-10-28 00:48:49
【问题描述】:

我使用 Glide 4.11.0 和 Realm 6.0.2 已经有一段时间了,最​​近将 Android Studio 4.0.x 升级到了 4.1。一切进展顺利。今天我运行了棉绒检查器,并开始做一些“清理”,没有什么不寻常的(看起来)。我经常做的其中一件事是替换针对 R.id 进行测试的 switch 语句。根据 lint 警告使用 if-else 语句来说明 Gradle 5.0 中将会发生什么。

当我这样做时,我确实使用了一些我命名为 'id' 的 int 变量来替换要比较的值 - 即,而不是如下的 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 的违规类中看到红色波浪线,但是一旦我开始运行应用程序并且它通过构建过程就会出错。

我在 Google 上搜索了一下,发现一篇帖子似乎 Realm 和 Glide (RequestOptions) 之间存在一些冲突,但奇怪的是为什么会突然开始发生这种情况?

我已经验证 GlideAppjava 类实际上正在构建 - 我正在使用调试构建变体,并且我可以在文件系统 GlideApp.java 中看到,它位于我拥有的正确包的 ap_generated_sources/debug 目录中我使用 @GlideModule 注释扩展 AppGlideModule 的类。

所以 GlideApp 正在生成。它只是没有得到认可。

另外一个新事物是我最近创建了一个动态功能模块。这个模块确实依赖于基础模块中的一个类(其中 GlideApp 被引用)。不确定这是否相关(在我开始进行 lint 清理之前,我有很多很多成功的构建)。

真令人沮丧!任何帮助表示赞赏。

【问题讨论】:

    标签: android-glide annotation-processing realm-java


    【解决方案1】:

    事实证明,答案正盯着我看,虽然有些隐蔽:我所做的 lint 检查的一部分是接受一些关于使变量“最终”的建议——包括那些在 Realm 类中用于定义 Realm 对象的建议. Realm 不喜欢这样 - 上面的构建错误输出在最后一行包含语句“类“专辑”包含非法的最终字段“id”。”

    “Album”扩展了 RealmObject,lint 建议将某些字段设为 final 的“自动接受”是罪魁祸首。

    我认为 Realm 的这个问题在某种程度上与其他注释处理产生了连锁反应 - 当我返回所有 RealmObject 类并删除“最终”声明时,构建现在可以顺利完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 2016-03-02
      • 2019-11-16
      • 2015-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多