我更新到了最新的Android N sdk。唯一不明白的是为什么我不能将java.time
引入我的代码中?我认为Java8在Android N中可用。那么为什么Google没有添加java.time
包呢?
我更新到了最新的Android N sdk。唯一不明白的是为什么我不能将java.time
引入我的代码中?我认为Java8在Android N中可用。那么为什么Google没有添加java.time
包呢?
java.time
包仅在API 26(Android O)中添加:
更新
从Android Gradle Plugin 4.0版本开始,您可以使用java.time
API的子集(以及其他一些Java 8语言API),而不需要为您的应用程序设置最低API级别:https://developer.android.com/studio/write/java8-support#library-desugaring
当使用Android Gradle plugin 4.0.0或更高版本构建应用程序时,支持以下一组API:
- 顺序流(
java.util.stream
)java.time
的一个子集java.util.function
- 最近添加到
java.util.{Map,Collection,Comparator}
中的内容- Optionals(
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的所有功能,仅支持以下功能:
反射和与语言相关的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
有一个用于 Android 的 java.time
API 的迁移库可供使用。
从 Android Gradle Plugin 4.0.0 开始,我们终于可以放心(几乎)地使用合适的 java.time
包类了:
https://developer.android.com/studio/write/java8-support
Optional、java.time、streams
等将由 Android Gradle Plugin 转译为 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