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

如何配置ProGuard/R8以避免j$.time.ZoneId引发的java.lang.VerifyError运行时异常

解决Desugar+R8混淆导致的j$.time.ZoneId VerifyError问题

这个问题的根源是Desugar生成的Java 8时间API兼容类(j$.time包下的类)被R8的混淆/优化破坏了类结构或方法签名,导致虚拟机加载时验证失败。全局关闭混淆(-dontobfuscate)虽然能解决,但显然没必要——我们只需要针对性保护这些Desugar生成的兼容类即可。

推荐的ProGuard/R8配置方案

在你的混淆配置文件(比如proguard-rules.pro)中添加以下规则,保留j$.time包下所有类、接口及其成员:

# 保护Desugar生成的Java 8时间API兼容类,避免混淆/优化破坏结构
-keep class j$.time.** { *; }
-keep interface j$.time.** { *; }

这条规则会告诉R8不要混淆j$.time包下任何类的名称、方法名和字段名,也不会移除这些类的任何成员,确保Desugar生成的兼容逻辑能正常运行。

额外检查建议

  • 确认你的Android Gradle Plugin(AGP)和Desugar版本匹配:你当前使用的AGP 7.0.0-beta03搭配Desugar 1.0.9是兼容的,但后续升级AGP时,记得同步升级desugar_jdk_libs的版本,避免版本不兼容带来的问题。
  • 检查是否有其他混淆规则意外影响了j$.time包:比如如果配置了-keepclasseswithmembers等规则,确保它们没有过滤掉这些兼容类的必要成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 18:57:39