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

Android 5.1中使用networknt json-schema-validator遇NoClassDefFoundError

Android 5.1中networknt json-schema-validator抛出NoClassDefFoundError问题

我使用networknt json-schema-validator校验JSON Schema,以下代码在Android 11(API 30)运行正常:

val mapper = ObjectMapper(YAMLFactory())
val jsonNodeReader = JsonNodeReader.builder().yamlMapper(mapper).build()
val factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4) {
    it.jsonNodeReader(jsonNodeReader).build()
}
val config = SchemaValidatorsConfig.builder().build()
val schema = factory.getSchema(schemaFile, InputFormat.YAML, config)
val messages = schema.validate(yamlFile, InputFormat.YAML, Consumer { it.executionConfig.formatAssertionsEnabled = true })

但在Android 5.1(API 22)运行时抛出如下错误:

Uncaught Exception in Thread ID: 1 - Thread name: main
     java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/BootstrapMethodError;
         at com.fasterxml.jackson.databind.util.ExceptionUtil.isFatal(ExceptionUtil.java:51)
         at com.fasterxml.jackson.databind.util.ExceptionUtil.rethrowIfFatal(ExceptionUtil.java:31)
         at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.<clinit>(JacksonAnnotationIntrospector.java:70)
         at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:402)
         at com.genedrive.print.SchemaValidator.validateSchema(SchemaValidator.kt:44)
         at com.genedrive.account.login.LoginFragment$onViewCreated$1.onClick(LoginFragment.kt:117)
         at android.view.View.performClick(View.java:4780)
         at android.view.View$PerformClick.run(View.java:19866)
         at android.os.Handler.handleCallback(Handler.java:739)
         at android.os.Handler.dispatchMessage(Handler.java:95)
         at android.os.Looper.loop(Looper.java:135)

当前Gradle配置:

minSdkVersion 18
targetSdkVersion 28

dependencies {
    implementation('com.networknt:json-schema-validator:1.4.1') {
        exclude group: 'org.slf4j', module: 'slf4j-api'
    }
    implementation 'org.slf4j:slf4j-api:2.0.0'
}

问题原因

BootstrapMethodError的出现是因为Android 5.1(API 22)原生不支持Java 8的部分特性(如接口默认方法、静态方法),而你依赖的jackson-databind或networknt库中使用了这些特性,同时项目未启用Java 8 desugar支持来兼容低版本Android。

解决方案

  1. 启用Java 8编译与Desugar支持
    在app模块的build.gradle(或build.gradle.kts)中添加以下配置:
    Groovy DSL:

    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
            coreLibraryDesugaringEnabled true
        }
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
    
    dependencies {
        coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
        // 保留原有依赖
    }
    

    Kotlin DSL:

    android {
        compileOptions {
            sourceCompatibility = JavaVersion.VERSION_1_8
            targetCompatibility = JavaVersion.VERSION_1_8
            isCoreLibraryDesugaringEnabled = true
        }
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
    
    dependencies {
        coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
        // 保留原有依赖
    }
    
  2. 强制兼容的Jackson版本
    networknt 1.4.1依赖的Jackson版本可能对低版本Android支持不佳,可强制指定兼容API 22的Jackson版本:

    implementation('com.networknt:json-schema-validator:1.4.1') {
        exclude group: 'org.slf4j', module: 'slf4j-api'
        exclude group: 'com.fasterxml.jackson.core'
        exclude group: 'com.fasterxml.jackson.dataformat'
    }
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.7'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.12.7'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.7'
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.12.7'
    implementation 'org.slf4j:slf4j-api:2.0.0'
    }
    
  3. 清理重建项目
    执行命令./gradlew clean build,确保依赖和编译配置完全生效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:40:12