0

我使用 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 的违规类中看到红色曲线,但是一旦我开始运行应用程序并且它通过构建过程就会出错。

我用谷歌搜索了一下,发现一篇文章似乎在 Realm 和 Glide (RequestOptions) 之间存在一些冲突,但对我来说奇怪的是为什么这会突然开始发生?

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

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

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

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

4

1 回答 1

0

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

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

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

于 2020-10-27T04:11:30.023 回答