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

Android 7.1.1及以下出现java.lang.NoClassDefFoundError: Ljava/time/Instant;崩溃求助

解决Android 7.1.1及以下版本的java.lang.NoClassDefFoundError: Ljava/time/Instant;崩溃

问题根源

Java 8引入的java.time包(包含Instant类)在Android系统里,只有API级别26(Android 8.0/Oreo)及以上才提供原生支持。这就导致在Android 7.1.1(API 25)及更早版本运行时,系统找不到这些类,直接抛出NoClassDefFoundError——这也是你的Oreo模拟器能正常运行Instant.parse(...)的原因。

解决方案

下面两种方案都能解决问题,你可以根据项目情况选择:

方式一:启用Core Library Desugaring(推荐)

Android Gradle Plugin 4.0及以上版本支持Core Library Desugaring,它能让低版本Android设备兼容Java 8的核心库API,包括java.time系列类。

操作步骤:

  1. 在模块级别的build.gradle文件中配置如下内容:
android {
    compileOptions {
        // 开启Java 8特性支持
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8

        // 启用Core Library Desugaring
        coreLibraryDesugaringEnabled true
    }
}

dependencies {
    // 添加desugaring依赖
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
}
  1. 同步Gradle后重新编译项目,低版本设备就能识别java.time.Instant类了。

方式二:使用ThreeTenABP兼容库

如果你的项目Gradle版本较低,或者不想启用desugaring,可以用ThreeTenABP——它是Java 8 java.time API的Android适配实现。

操作步骤:

  1. 在模块级别的build.gradle中添加依赖:
dependencies {
    implementation 'com.jakewharton.threetenabp:threetenabp:1.4.6'
}
  1. 在自定义Application类中初始化库:
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        AndroidThreeTen.init(this);
    }
}
  1. 把代码里的java.time.Instant替换为org.threeten.bp.Instant,比如原来的Instant.parse(...)改成org.threeten.bp.Instant.parse(...)。

验证

修改完成后,在Android 7.1.1或更低版本的测试设备/模拟器上运行代码,Instant.parse(...)就能正常执行,不会再出现崩溃。

内容的提问来源于stack exchange,提问作者Monica Aspiras Labbao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:03:45