使用 Java 8 语言功能
Android Studio 3.0 及以上版本支持所有 Java 7 语言功能,以及部分 Java 8 语言功能(具体因平台版本而异)。 本页介绍您可以使用的 Java 8 语言功能、如何正确配置项目以使用这些功能以及您可能遇到的任何已知问题。
注:在开发 Android 应用时,可以选择使用 Java 8 语言功能。 您可以将项目的源代码和目标代码兼容性值保留为 Java 7,但仍须使用 JDK 8 进行编译。
Android Studio 为使用部分 Java 8 语言功能及利用这些功能的第三方库提供内置支持。 如图 1 所示,默认工具链对javac
编译器的输出执行字节码转换(称为desugar
),从而实现新语言功能。Jack 不再受支持,您需要首先停用 Jack才能使用默认工具链内置的 Java 8 支持。
要开始使用受支持的 Java 8 语言功能,请更新 Android 插件到3.0.0
(或更高版本)。 然后,针对使用(包括在源代码中或通过依赖项使用)Java 8 语言功能的每个模块,在其build.gradle
文件中添加以下代码:
android { ... // Configure only for each module that uses Java 8 // language features (either in its source code or // through dependencies). compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
注:如果 Android Studio 检测到您的项目使用的是 Jack、Retrolambda或DexGuard,IDE 则会使用由这些工具提供的 Java 8 支持。 但您可以考虑迁移至默认工具链。
虽然 Android Studio 并非支持所有 Java 8 语言功能,但未来发布的 IDE 版本将会增加更多功能。 目前,部分功能和 API 已可使用,具体取决于您所使用的minSdkVersion
,详见下表。
除了上述 Java 8 语言功能和 API 之外,Android Studio 3.0 及更高版本还将对try
-with-resources的支持扩展到所有级别的 Android API。
Desugar 目前暂不支持MethodHandle.invoke
或MethodHandle.invokeExact
。 如果您的源代码或任一模块依赖项使用了其中一种函数,则需指定minSdkVersion 26
或更高版本。 否则会出现以下错误: