java.lang.VerifyError: 验证器拒绝类 j$.time.ZoneId:

问题描述

我无法弄清楚我可以使用什么 proguard/r8 配置来避免以下错误

环境:

  • openjdk 版本“11.0.11” 2021-04-20
  • Android Gradle 插件 7.0.0-beta03
  • Gradle 7.0.2
  • app/build.gradle.kts:
android { 
  compileSdkPreview = "android-S"
  defaultConfig {
    minSdk = 24
    targetSdk = 30
  }
  compileOptions { 
    iscoreLibraryDesugaringEnabled = true 
  } 
  buildType{
    getByName("release") {
      isDebuggable = false
      isMinifyEnabled = true
      isShrinkResources = true
  }
}
   
dependencies { 
  coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.9") 
}

我遇到了以下运行时异常。

06-09 15:43:42.994 11747 11747 E AndroidRuntime: FATAL EXCEPTION: main
06-09 15:43:42.994 11747 11747 E AndroidRuntime: Process: com.example.myapp,PID: 11747
06-09 15:43:42.994 11747 11747 E AndroidRuntime: java.lang.VerifyError: Verifier rejected class j$.time.ZoneId: j$.time.ZoneId j$.time.ZoneId.q(java.lang.String,j$.time.ZoneOffset) Failed to verify: j$.time.ZoneId j$.time.ZoneId.q(java.lang.String,j$.time.ZoneOffset): [0x10]  can't resolve returned type 'Reference: j$.time.ZoneId' or 'Unresolved Reference: j$.time.ZoneOffset'
06-09 15:43:42.994 11747 11747 E AndroidRuntime:  j$.time.ZoneId j$.time.ZoneId.r(java.lang.String,int,boolean) Failed to verify: j$.time.ZoneId j$.time.ZoneId.r(java.lang.String,boolean): [0x3D] unexpected non-exception class Reference: a.b (declaration of 'j$.time.ZoneId' appears in /data/app/~~t4Hx1UMkLP0rmmxs6BLp2A==/com.example.myapp-gaznFp2vMqRsP8uHlL-Rpg==/base.apk!classes2.dex)

注意:

如果将 -dontobfuscate 添加到 proguard/r8 配置文件中,那么运行时错误就会消失。 显然这并不理想,因此是我的问题。

解决方法

我将 desugar_jdk_libs 升级到 1.1.15,问题似乎已经消失。

Changelog 还指示对错误类别的更改:

https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md