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

Android API 21使用jsoup 1.17.2出现StringUtil找不到的问题及解决办法

问题描述

使用最新版本jsoup(1.17.2),在Android API level 21设备上运行以下代码:

Jsoup.connect(urlToParse).get()

执行时出现NoClassDefFoundError错误,错误栈如下:

java.lang.NoClassDefFoundError: org.jsoup.internal.StringUtil$$ExternalSyntheticLambda0
    at org.jsoup.internal.StringUtil.<clinit>(StringUtil.java:338)
    at org.jsoup.helper.UrlBuilder.<init>(UrlBuilder.java:30)
    at org.jsoup.helper.HttpConnection$Base.url(HttpConnection.java:427)
    at org.jsoup.helper.HttpConnection$Request.url(HttpConnection.java:585)
    at org.jsoup.helper.HttpConnection.url(HttpConnection.java:139)
    at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:79)
    at org.jsoup.Jsoup.connect(Jsoup.java:92)

该代码在Android API level 30+设备上运行无异常,询问除使用旧版本jsoup外的其他解决办法。

解决办法
  • 启用核心库脱糖(Core Library Desugaring)
    这个错误源于jsoup 1.17.2使用了Java 8+的语法特性(如lambda表达式生成的合成类),而Android API 21及以下原生不支持这些特性。启用核心库脱糖可让旧API级别设备兼容Java 8+语言特性。
    在Module级别的build.gradle中添加以下配置:

    android {
        compileOptions {
            coreLibraryDesugaringEnabled true
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
    
    dependencies {
        coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
    }
    

    同步项目后重新构建运行即可解决类找不到的问题。

  • 配置混淆规则(若开启混淆)
    如果项目启用了代码混淆,需确保jsoup的内部类不会被误删除。在proguard-rules.pro中添加规则:

    -keep class org.jsoup.** { *; }
    -dontwarn org.jsoup.**
    

    避免混淆工具移除jsoup所需的内部合成类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:30:11