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

升级Android Studio Gradle插件导致旧API版本脱糖失效

解决AGP升级后API24设备java.time.Instant找不到的问题

问题背景

将Android Studio Gradle插件(AGP)从7.0.4升级至7.3.1,同时Gradle发行版从7.0.2升级至7.4后,未修改其他代码,应用在Android API24设备上崩溃,报错java.lang.NoClassDefFoundError: java.time.Instant。已开启coreLibraryDesugaringEnabled,脱糖库版本为com.android.tools:desugar_jdk_libs:1.1.5,升级该库后问题仍未解决。

升级的配置信息

  • AGP配置变更:
classpath 'com.android.tools.build:gradle:7.0.4' -> 
classpath 'com.android.tools.build:gradle:7.3.1'
  • Gradle发行版配置变更:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip ->
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip

当前脱糖配置

compileOptions {
    coreLibraryDesugaringEnabled true
    sourceCompatibility = javaVersion
    targetCompatibility = javaVersion
}
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'

报错堆栈

uncaughtException
    java.lang.NoClassDefFoundError: java.time.Instant
        at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
        at java.lang.Class.getDexCacheType(Class.java:2551)
        at java.lang.reflect.Method.getReturnType(Method.java:150)
        at java.lang.Class.getDeclaredMethods(Class.java:1811)
        at java.io.ObjectStreamClass.computeDefaultSUID(ObjectStreamClass.java:1684)
        at java.io.ObjectStreamClass.-wrap8(ObjectStreamClass.java)
        at java.io.ObjectStreamClass$1.run(ObjectStreamClass.java:239)
        at java.io.ObjectStreamClass$1.run(ObjectStreamClass.java:238)
        at java.security.AccessController.doPrivileged(AccessController.java:41)
        at java.io.ObjectStreamClass.getSerialVersionUID(ObjectStreamClass.java:236)
        at java.io.ObjectStreamClass.writeNonProxy(ObjectStreamClass.java:711)
        at java.io.ObjectOutputStream.writeClassDescriptor(ObjectOutputStream.java:680)
        at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1322)
        at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1271)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1467)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1584)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1549)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1472)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1218)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
        at android.os.Parcel.writeSerializable(Parcel.java:1521)
        at android.os.Parcel.writeValue(Parcel.java:1474)
        at android.os.Parcel.writeArrayMapInternal(Parcel.java:723)
        at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1408)
        at android.os.Bundle.writeToParcel(Bundle.java:1133)
        at android.os.Parcel.writeBundle(Parcel.java:763)
        at android.content.Intent.writeToParcel(Intent.java:8655)
        at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3052)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
        at android.app.Activity.startActivityForResult(Activity.java:4224)
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:2)
        at androidx.core.app.a.i(ActivityCompat.java:1)
        at androidx.activity.ComponentActivity$b.f(ComponentActivity.java:166)
        at androidx.activity.result.ActivityResultRegistry$a.b(ActivityResultRegistry.java:35)
        at androidx.activity.result.ActivityResultLauncher.a(ActivityResultLauncher.java:2)

可行解决办法

1. 匹配AGP版本升级脱糖库

AGP版本与脱糖库版本存在兼容性要求,AGP7.3.x需要搭配更高版本的脱糖库。将脱糖库升级至com.android.tools:desugar_jdk_libs:2.0.4或对应兼容版本:

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'

2. 防止R8混淆移除脱糖类

R8混淆可能会误删脱糖后的java.time相关类,在proguard-rules.pro中添加以下规则:

-keep class java.time.** { *; }
-keep interface java.time.** { *; }

3. 明确指定Java版本

确保compileOptions中明确设置Java 8版本,避免javaVersion变量可能带来的不确定:

compileOptions {
    coreLibraryDesugaringEnabled true
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

4. 清理缓存并重新构建

执行Gradle清理命令,清除旧构建缓存后重新编译:

./gradlew clean assembleDebug

5. 检查第三方库依赖

排查项目中是否有第三方库直接依赖未脱糖的java.time类,若存在,需确保该库也参与脱糖,或替换为兼容Android API24的替代库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:11:35