I updated to the latest Android N sdk. The only thing I don't understand is why I cannot import java.time
into my code? I thought Java8 is available through Android N. Then why didn't Google add java.time
package?
Android N is not supporting all the features of Java 8. Following features are only supported:
- Default and static interface methods
- Lambda expressions
- Repeatable annotations
Reflection and language-related APIs:
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.Method.isDefault()
and Reflection APIs associated with repeatable annotations, such as
AnnotatedElement.getAnnotationsByType(Class)
Utility APIs:
java.util.function
For more info check the following link: http://developer.android.com/preview/j8-jack.html
java.time
package was added only in API 26 (Android O):
https://developer.android.com/reference/java/time/package-summary.html
UPDATE
Starting with version 4.0 of the Android Gradle Plugin, you can use a subset of java.time
APIs (along with a number of other Java 8 language APIs) without requiring a minimum API level for your app: https://developer.android.com/studio/write/java8-support#library-desugaring
The following set of APIs are supported when building your app using Android Gradle plugin 4.0.0 or higher:
- Sequential streams (
java.util.stream
)- A subset of
java.time
java.util.function
- Recent additions to
java.util.{Map,Collection,Comparator}
- Optionals (
java.util.Optional
,java.util.OptionalInt
andjava.util.OptionalDouble
) and some other new classes useful with the above APIs- Some additions to
java.util.concurrent.atomic
(new methods onAtomicInteger
,AtomicLong
andAtomicReference
)ConcurrentHashMap
(with bug fixes for Android 5.0)
To enable support for these language APIs, one needs to include the following lines build.gradle
file:
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 is not supporting all the features of Java 8. Following features are only supported:
- Default and static interface methods
- Lambda expressions
- Repeatable annotations
Reflection and language-related APIs:
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.Method.isDefault()
and Reflection APIs associated with repeatable annotations, such as
AnnotatedElement.getAnnotationsByType(Class)
Utility APIs:
java.util.function
For more info check the following link: http://developer.android.com/preview/j8-jack.html
There is backport library of java.time
APIs for Android that can be used
Starting from Android Gradle Plugin 4.0.0, we can finally use proper java.time
package classes without worries (almost):
https://developer.android.com/studio/write/java8-support
Optional, java.time, streams
, and more are desugared into Java 7 by the Android Gradle Plugin.
To add those classes support, you just need to add a few lines to your build file:
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'
}
Here is the full list: https://developer.android.com/studio/write/java8-support-table
© 2022 - 2024 — McMap. All rights reserved.