Searching the web, it is not clear if Java 8 is supported for Android development or not.
Before I download/setup Java 8, can some one point me at any \"official\" d
UPDATE 2020/01/17
Android Studio 4.0 includes support for using a number of Java 8 language APIs, by using technique called desugaring, without requiring a minimum API level for your app:
https://developer.android.com/studio/preview/features#j8-desugar
The following set of APIs is supported in this release:
- 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 support these language APIs, D8 compiles a separate library DEX file that contains an implementation of the missing APIs and includes it in your app. The desugaring process rewrites your app’s code to instead use this library at runtime.
To enable support for these language APIs, include the following in your module’s
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' }
ORIGINAL POST FROM 2017
Android Studio 3.0 started to provide built-in support for some of Java 8 language features, which are:
Also starting from API level 24 the following Java 8 API are available:
java.util.stream
java.util.function
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
java.lang.reflect.Method.isDefault()
Besides that, the try-with-resources
support was extended to all Android API levels.
More Java 8 features are promised to be added in the future.
To start using supported Java 8 language features, update the Android plugin to 3.0.0-alpha1 (or higher) and add the following to your module’s build.gradle file:
android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
For more details visit:
https://developer.android.com/studio/write/java8-support.html
Native Java 8 arrives on android! Finally!
remove the Retrolambda plugin and retrolambda block from each module's build.gradle file:
To disable Jack and switch to the default toolchain, simply remove the jackOptions block from your module’s build.gradle file
To start using supported Java 8 language features, update the Android plugin to 3.0.0 (or higher)
Starting with Android Studio 3.0 , Java 8 language features are now natively supported by android:
Also from min API level 24 the following Java 8 API are available:
Add these lines to your application module’s build.gradle to inform the project of the language level:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Disable Support for Java 8 Language Features by adding the following to your gradle.properties file:
android.enableDesugar=false
You’re done! You can now use native java8!
Latest news:
Google announce that with Android N and Android Studio 2.1+, platform will support Java 8. Also stable version of studio 2.1 was released.
At last we can use lambda expressions. No more list filter in for loop. Horeeey.
When I asked this question almost 2 years ago the answer really was “officially” no, but as pointed out by ekcr1's answer you can get one of the most highly anticipated features (lambdas) to work if you use retrolamba. At the time I was still using eclipse, as Android Studio was in “preview” mode, so I never did pursue this path.
Today, I think the “official” answer is still no, and while retrolamba still seems like a good way to go, there is another option for those willing to go down a somewhat “unofficial” route can take, namely Kotlin.
Today Kotlin reached 1.0.0. For those not familiar with Kotlin, more info can be found at their website found here:
https://kotlinlang.org
or watch this utube video of a talk given by Jake Wharton
https://www.youtube.com/watch?v=A2LukgT2mKc
All the above solutions doesn't seem to work in 2019 with the latest Android Studio 3.4+.
I figured out a perfect and up to date solution to migrate or upgrade your Android Project to Java 8.
Solution:
Click on File -> Project Structure -> Modules -> Properties tab.
Change the Source Compatibility and Target Compatibility to 1.8 (Java 8)
Yes, you can use Java 8 Language features in Android Studio but the version must be 3.0 or higher. Read this article for how to use java 8 features in the android studio.
https://bijay-budhathoki.blogspot.com/2020/01/use-java-8-language-features-in-android-studio.html