23

我更新到最新的 Android N sdk。我唯一不明白的是为什么我不能导入java.time到我的代码中?我以为Java8可以通过Android N获得。那为什么Google不添加java.time包?

4

4 回答 4

25

java.time包仅在 API 26 (Android O) 中添加: https ://developer.android.com/reference/java/time/package-summary.html

更新

但是,从 4.0 版开始,Android Studio 允许使用java.timeAPI 的子集(以及许多其他 Java 8 语言 API),无需为您的应用设置最低 API 级别:
https ://developer.android.com/studio/preview /功能#j8-脱糖

此版本支持以下 API 集:

  • 顺序流 ( java.util.stream)
  • 的一个子集java.time
  • java.util.function
  • 最近添加到java.util.{Map,Collection,Comparator}
  • 可选项 ( java.util.Optional,java.util.OptionalIntjava.util.OptionalDouble) 和其他一些对上述 API 有用的新类
  • 对(和的java.util.concurrent.atomic新方法)的一些补充AtomicIntegerAtomicLongAtomicReference
  • ConcurrentHashMap(修复了 Android 5.0 的错误)

要启用对这些语言 API 的支持,需要包含以下行build.gradle文件:

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}
于 2017-04-05T19:39:08.937 回答
21

Android N 不支持 Java 8 的所有功能。仅支持以下功能:

  • 默认和静态接口方法
  • Lambda 表达式
  • 可重复的注释

反射和语言相关的 API:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault()

和与可重复注释相关联的反射 API,例如 AnnotatedElement.getAnnotationsByType(Class)

实用 API:

  • java.util.function

有关更多信息,请查看以下链接:http: //developer.android.com/preview/j8-jack.html

于 2016-03-16T06:44:53.120 回答
18

java.time可以使用的 Android API 的backport 库

https://github.com/JakeWharton/ThreeTenABP

于 2017-02-03T09:43:47.570 回答
4

从 Android Gradle Plugin 4.0.0 开始,我们终于可以无忧无虑地使用正确的java.time包类(几乎): https ://developer.android.com/studio/write/java8-support

Optional, java.time, streams,并且更多内容被 Android Gradle 插件脱糖到 Java 7 中。

要添加这些类支持,您只需在构建文件中添加几行:

android {
  defaultConfig {
    // Required when setting minSdkVersion to 20 or lower
    multiDexEnabled true
  }

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
}

以下是完整列表:https ://developer.android.com/studio/write/java8-support-table

于 2020-08-08T13:37:22.083 回答