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

Android低API级别下Kotlinx JSON序列化遇VerifyError问题求助

解决kotlinx JSON序列化在Android API23以下抛出VerifyError的问题

这个问题我之前在适配低版本Android时也踩过坑,核心原因是API23及以下的ART虚拟机对Java 8字节码的验证规则更严格,而kotlinx.serialization和kethereum库用到的一些字节码特性(比如默认方法、Lambda相关的字节码)在低版本上无法通过验证,从而触发VerifyError。

下面是几个经过验证的解决方案,按优先级尝试:

1. 启用Core Library Desugaring(最有效)

Android API23本身不支持Java 8的部分核心库特性,通过desugar工具可以把高版本字节码转换为低版本兼容的格式,这是解决这类问题的首选方案:

配置步骤:

  • 在模块级别的build.gradle(通常是app/build.gradle)中,添加Java 8编译配置和desugar开关:
android {
    compileOptions {
        // 启用desugar
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    // Kotlin也要对应设置JVM目标版本
    kotlinOptions {
        jvmTarget = "1.8"
    }
}
  • 在dependencies块中添加desugar依赖:
dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}

2. 检查并修正序列化类的注解使用

确保你的KdfSerializer类符合低版本Android的字节码要求:

  • 不要把@Serializer注解用在非public的类上,低版本ART对类的访问权限验证更严格;
  • 如果是自定义Serializer,避免使用Kotlin的inline类、动态代理等在低版本上兼容性差的特性;
  • 检查kethereum库的版本,尽量升级到最新的稳定版,新版本通常会修复低版本Android的兼容问题。

3. 调整混淆规则(如果开启了混淆)

如果你的项目启用了代码混淆,序列化相关的类和注解很容易被混淆破坏,导致验证失败。添加以下混淆规则到proguard-rules.pro:

// 保留序列化相关的注解和内部类
-keepattributes *Annotation*, InnerClasses
-dontnote kotlinx.serialization.AnnotationsKt

// 保留kotlinx.serialization核心类
-keep class kotlinx.serialization.** { *; }

// 保留你的问题中涉及的类
-keep class org.kethereum.wallet.model.KdfSerializer { *; }
-keep class org.kethereum.wallet.model.WalletCrypto { *; }

// 保留所有带有@Serializable注解的类及其字段
-keepclasseswithmembers class ** {
    @kotlinx.serialization.Serializable <fields>;
}

// 保留所有带有@Serializer注解的类及其方法
-keepclasseswithmembers class ** {
    @kotlinx.serialization.Serializer <methods>;
}

为什么这些方法有效?

API23及以下的ART虚拟机没有完全实现Java 8的字节码规范,对一些新的字节码指令(比如invokedynamic)的验证非常严格,desugar工具会把这些指令转换成低版本能识别的格式;而混淆如果破坏了序列化类的结构,ART在验证类时就会判定类无效,抛出VerifyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:40:40