升级Guava至28.2-jre后CacheBuilder无法创建缓存求助
解决Guava 28.2-jre升级后
Suppliers$SupplierOfInstance找不到的问题 从你的崩溃日志和描述来看,核心问题是升级到Guava 28.2-jre后,Android运行时找不到com.google.common.base.Suppliers$SupplierOfInstance这个内部类,导致CacheBuilder初始化失败。下面是具体的原因分析和解决方案:
核心原因
Guava从28.x版本开始,官方对Java SE(-jre后缀)和Android(-android后缀)版本做了明确拆分:
guava:x.y-jre版本包含针对Java标准库的优化和类,部分类依赖Java SE特有的API,并不完全兼容Android运行时guava:x.y-android版本是专门为Android平台定制的,移除了Android不支持的类,同时调整了内部实现以适配Android环境
你遇到的Suppliers$SupplierOfInstance类在28.2-jre版本中要么被重构移动,要么依赖了Android没有的API,最终导致类加载失败。
解决方案
1. 切换到Guava Android专用版本(优先推荐)
将你的依赖配置替换为Android版本:
implementation com.google.guava:guava:28.2-android
这个版本完全适配Android环境,内部实现已经调整,不会出现类缺失的问题,也是官方推荐的Android项目依赖方式。
2. 调整ProGuard/R8混淆规则(如果必须使用jre版本)
如果由于某些原因必须使用28.2-jre版本,需要在ProGuard/R8规则中添加以下配置,确保Guava的核心类不被混淆或移除:
# 保留Guava基础类 -keep class com.google.common.base.** { *; } # 保留缓存相关类 -keep class com.google.common.cache.** { *; } # 保留Guava内部依赖的其他核心类 -keep class com.google.common.util.concurrent.** { *; }
不过这种方式可能会引入其他兼容性问题,比如Java SE API依赖导致的运行时异常,所以还是优先推荐使用Android版本。
3. 排查依赖冲突
如果切换版本后问题仍然存在,需要检查项目中是否有其他依赖引入了旧版本的Guava,导致类版本不一致。可以通过以下Gradle命令查看依赖树:
./gradlew app:dependencies
找到冲突的Guava依赖,使用exclude关键字排除旧版本:
implementation('some-other-dependency') { exclude group: 'com.google.guava', module: 'guava' }
按照以上步骤操作后,应该能解决CacheBuilder初始化失败的问题。
内容的提问来源于stack exchange,提问作者Selvaganesan Saminathan
相关产品推荐
相关产品推荐

