我使用 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 清理之前,我有很多很多成功的构建)。
太令人沮丧了!任何帮助表示赞赏。