我更新到最新的 Android N sdk。我唯一不明白的是为什么我不能导入java.time
到我的代码中?我以为Java8可以通过Android N获得。那为什么Google不添加java.time
包?
4 回答
java.time
包仅在 API 26 (Android O) 中添加:
https ://developer.android.com/reference/java/time/package-summary.html
更新
但是,从 4.0 版开始,Android Studio 允许使用java.time
API 的子集(以及许多其他 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.OptionalInt
和java.util.OptionalDouble
) 和其他一些对上述 API 有用的新类- 对(和的
java.util.concurrent.atomic
新方法)的一些补充AtomicInteger
AtomicLong
AtomicReference
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'
}
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
有java.time
可以使用的 Android API 的backport 库
从 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