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

AeadConfig.register()抛出IllegalAccessError异常排查求助

问题定位与解决办法

这个IllegalAccessError的核心是类访问权限不兼容:Tink的HmacKeyFormat类(由proto生成)试图访问Protobuf核心类AbstractMessage的memoizedSize字段,但该字段在你当前使用的Protobuf版本中是私有/包级私有,而Tink编译时依赖的Protobuf版本里这个字段的访问权限更宽松。

哪怕你已经确认依赖树里Protobuf版本无冲突,也可能存在以下隐性问题,对应解决办法如下:

1. 严格对齐Tink与Protobuf的版本兼容性

Tink对Protobuf版本有明确要求,不同Tink版本对应特定的Protobuf版本范围,比如:

  • Tink 1.7.x 适配 Protobuf 3.19.x
  • Tink 1.8.x+ 适配 Protobuf 3.20.x+

检查你的Tink版本,强制指定匹配的Protobuf版本,在Gradle中配置:

// 锁定Protobuf版本为Tink要求的对应版本
implementation platform("com.google.protobuf:protobuf-bom:3.24.4")
// 引入匹配的Tink版本
implementation "com.google.crypto.tink:tink:1.11.0"

2. 清理编译缓存与旧生成类

如果之前用不同版本的Protobuf编译器生成过类,缓存的旧类会和当前版本冲突:

  • 执行Gradle命令彻底清理:./gradlew clean build --refresh-dependencies
  • 确保所有proto文件都用当前指定的Protobuf版本重新编译

3. 排查多模块项目的依赖隔离问题

如果是多模块项目,个别子模块可能绕过根项目的版本约束,引入了不同版本的Protobuf:

  • 对每个子模块执行./gradlew :[模块名]:dependencies,逐个排查Protobuf依赖
  • 确保所有模块都通过platform或强制版本锁定使用统一的Protobuf版本

4. 解决Protobuf Lite与Full版本冲突

Tink默认依赖Protobuf Lite版本,如果项目中同时引入了Full版本,会导致类定义不一致:

  • 在Gradle中排除Tink依赖的Full版本,明确引入Lite版本:
implementation("com.google.crypto.tink:tink") {
    exclude group: "com.google.protobuf", module: "protobuf-java"
}
implementation "com.google.protobuf:protobuf-java-lite:3.24.4"

验证步骤

  1. 执行./gradlew dependencies | grep protobuf,确认所有Protobuf相关依赖版本完全一致
  2. 清理缓存后重新编译项目
  3. 运行初始化代码,确认AeadConfig.register()正常执行

内容的提问来源于stack exchange,提问作者feroze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:54:18