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

将compileSdk从34升级到35后运行时找不到List.reversed()方法

问题原因与解决方案

核心原因

你遇到的NoSuchMethodError,是因为编译时reversed()被解析成了Java 21新增的java.util.List.reversed()原生方法,而非Kotlin标准库的扩展方法。

当targetSdkVersion升级到35(对应Android 15),Android Gradle Plugin默认允许使用API 35对应的Java 21新API,但你的App运行在API 34及以下的设备时,系统内置的Java库并没有这个原生方法,因此抛出找不到方法的错误。

虽然IDE显示该方法属于kotlin.collections,但编译阶段的方法解析优先级,导致实际生成的代码调用了Java原生的reversed()。

解决方法

方法一:显式指定调用Kotlin扩展方法

直接通过全限定名调用Kotlin的reversed()扩展方法,强制编译器选择Kotlin实现:

return kotlin.collections.reversed(dataToIncrease).toMutableList()

方法二:手动实现逆序逻辑(兼容更稳妥)

如果担心方法解析问题,也可以手动实现列表逆序,彻底避免依赖版本相关的方法:

fun MutableList<Byte>.increaseDataLengthBy(numberToIncrease: Int): MutableList<Byte> {
    val dataToIncrease = this
    if (dataToIncrease.size > 1) {
        dataToIncrease.reverse()
    }

    repeat(numberToIncrease) { dataToIncrease.add(0) }

    // 手动逆序
    val reversedList = mutableListOf<Byte>()
    for (i in dataToIncrease.size - 1 downTo 0) {
        reversedList.add(dataToIncrease[i])
    }
    return reversedList
}

方法三:调整编译配置(限制Java API版本)

在模块的build.gradle.kts(或build.gradle)中,添加配置强制使用兼容低版本的Java API,避免编译时引入高版本方法:

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")
}

启用核心库脱糖(Desugaring)后,AGP会将高版本Java API转换为低版本兼容的实现,确保运行时不会出现方法缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:12:41