Android Studio 3.0 及以上版本已经支持所有 Java 7 语言功能,以及部分 Java 8 语言功能(具体因平台版本而异)。
注:在开发 Android 应用时,可以选择使用 Java 8 语言功能。 您可以将项目的源代码和目标代码兼容性值保留为 Java 7,但仍须使用 JDK 8 进行编译。
使用Java8特性
Module.gradle
-> android
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
支持的 Java 8 语言功能和 API
虽然 Android Studio 并非支持所有 Java 8 语言功能,但未来发布的 IDE 版本将会增加更多功能。 目前,部分功能和 API 已可使用,具体取决于您所使用的 minSdkVersion,详见下表。
Java 8 语言功能 | 兼容的 minSdkVersion
|
---|---|
Lambda 表达式 | 任意。 然而,只有在 Lambda 采集的所有值可序列化时才支持 Lambda 序列化。 |
函数引用 | 任意。 |
类型注解 | 任意。 然而,类型注解信息仅在编译时可用,在运行时不可用。 此外,在 API 级别 24 及更低级别中,平台支持 TYPE ,而不支持 ElementType.TYPE_USE 或 ElementType.TYPE_PARAMETER 。 |
默认和静态接口函数 | 任意。 |
重复注解 | 任意。 |
Java 8 语言API | 兼容的 minSdkVersion
|
---|---|
java.lang.annotation.Repeatable |
API 级别 24 或更高级别。 |
AnnotatedElement.getAnnotationsByType(Class) |
API 级别 24 或更高级别。 |
java.util.stream |
API 级别 24 或更高级别。 |
java.lang.FunctionalInterface |
API 级别 24 或更高级别。 |
java.lang.reflect.Method.isDefault() |
API 级别 24 或更高级别。 |
java.util.function |
API 级别 24 或更高级别。 |
除了上述 Java 8 语言功能和 API 之外,Android Studio 3.0 及更高版本对 try-with-resources
的支持扩展到所有级别的 Android API。
停用对 Java 8 语言功能的支持
如果您遇到与 Java 8 语言功能支持相关的问题,可在 gradle.properties 文件中加入以下代码来停用此支持:
android.enableDesugar=false