You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:52:38