在 Android 上使用 java.time 时出现 NoClassDefFoundError

use*_*408 2 android java-8 java-time

我的 Android 应用程序使用的 JAR 依赖于 中的一些类java.time,例如LocalTime,因此至少需要 Java 8。

网上的多个消息来源指出,更高版本的 Android 和工具链支持 Java 8。

我使用 gradle 构建我的应用程序,但不使用(或希望使用)Android Studio。我使用该插件的 3.1.4 版本(最新版本与 Gradle 4.4 兼容,该版本随撰写本文时最新的 Ubuntu LTS 18.04 一起提供)。最低 SDK 为 14,目标为 26。构建工具版本为 27.0.3。

该应用程序构建并安装得很好,但是当它尝试使用其中一个类时,它会崩溃并出现异常:

Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljava/time/LocalTime;

问题:

  • 是否java.time适用于支持 Java 8 的 Android 版本?
  • 如果是,最低 API 版本是多少?(我在Anbox上测试过,它支持API 25。)
  • 我还缺少什么吗?

Com*_*are 5

java.time 在支持 Java 8 的 Android 版本上可用吗?

是的。

如果是,最低 API 版本是多少?

LocalDateTimeJavaDocs中所述(请参见右上角),可在 API 级别 26 及更高版本上使用。

我还缺少什么吗?

您可以考虑使用Java 8 日期/时间 API 的向后移植。