提问人:nPn 提问时间:4/27/2014 最后编辑:EnzokienPn 更新时间:11/4/2021 访问量:296645
是否可以使用 Java 8 进行 Android 开发?
Is it possible to use Java 8 for Android development?
问:
在网上搜索,目前尚不清楚 Android 开发是否支持 Java 8。
在我下载/安装 Java 8 之前,有人可以指出任何“官方”文档,说明 Android 开发支持或不支持 Java 8。
答:
Java 8 版本
Android 支持所有 Java 7 语言功能以及部分 Java 8 语言功能,这些功能因平台版本而异。
检查 java 8 的哪些特性
我们决定将对 Java 8 语言特性的支持直接添加到当前的 javac 和 dx 工具集中,并弃用 Jack 工具链。有了这个新方向,依赖于 Java 类文件格式的现有工具和插件应该可以继续工作。展望未来,Android 构建系统将原生支持 Java 8 语言功能。我们的目标是在未来几周内将其作为 Android Studio 的一部分推出,我们希望尽早与您分享这一决定。
Eclipse 用户:
对于喜欢 Eclipse 的老开发者,google 停止支持 Eclipse Android 开发者工具
如果您安装了 Java 8 JDK,请尝试一下,如果出现任何问题,请尝试从 Java → Compiler 的窗口菜单→首选项→将编译器设置为 Eclipse 中的 1.6。 Java 7 也可以使用:
如果您以 Android 5.0 和 高等。
安装多个 JDK 并尝试。
评论
更新 2017/11/04 - Android Studio 3.0 现在原生支持 Java 8。 现在不再需要了。查看 https://developer.android.com/studio/write/java8-support.htmlgradle-retrolambda
如果您使用的是 ,上面的链接还包括迁移说明。原文答案如下:gradle-retrolambda
Android 不支持 Java 8。它最多只支持 Java 7(如果你有 kitkat),但它仍然没有 invokedynamic,只有新的语法糖。
如果你想使用 lambdas,这是 Android 中 Java 8 的主要特性之一,你可以使用 gradle-retrolamba。它是一个集成了 retrolambda 的 gradle 构建依赖项,retrolambda 是一种将 Java 8 字节码转换回 Java 6/7 的工具。基本上,如果您在 Android Studio 中将编译器设置为编译 Java 8 字节码,从而允许 lambda,它会将其转换回 Java 6/7 字节码,然后再转换为 dalvik 字节码。如果您想在 Android 中尝试一些 JDK 8 功能来代替官方支持,这是一个黑客。
评论
try-with-resources
Android 使用的 Java 是从 Java 6 分支而来的。
从 Android SDK 版本 19 开始,您可以通过这样做来使用 Java 7 功能。尚不完全支持 Java 8。
评论
您确实可以使用 gradle 构建依赖项来使用 Java 8 进行 Android 开发。gradle-retrolamba
以下是我最近运行 lambda 表达式进行 Android 开发的完整指南。本指南的原始来源在末尾提到。
在本指南中,一种将某些 Java 8 特性引入的方法 将演示 Android 开发工具,专门针对 Eclipse IDE。但是,本指南中将介绍的步骤也可能适用于Google的新起义发展 环境,Android Studio。它基于社区版的 JetBrains 的流行 IntelliJ Idea IDE,最近 2014 年 7 月初,谷歌略微升级到“测试版” 在编写本指南之前。Eclipse 仍将是突出的 开发环境,至少在一段时间内,并考虑到 事实上,大多数 Android 项目都是使用 Eclipse 开发的,一个 将新的 Java 8 特性(如 lambda 表达式)引入的方法 ADT 似乎对开发人员非常有用。
Android 开发基于一个名为 Apache Harmony 项目于 2011 年终止。最 Android 开发中常用的 Java 语法是 Java 6 (v1.6) 和 Java 7 (v1.7) 在 KitKat 版本上也部分受支持 (安卓 4.4.+)。因此,Java 8 具有类似 lambda 表达式的特性 不能直接在 Android 应用程序开发中使用,否则 对开发工具进行一些调整。幸运的是,这些 结构基本上是一些“句法糖”增强,其中 给开发人员提供诸如“匿名类”之类的缺点 它们可以翻译成 Java 6 或 Java 7 类。
将 Java 8 源代码转换为低级 Java 的最新方法 versions 称为 RetroLambda。这个库让开发人员运行 Java 8 代码,在 Java 7 甚至更低版本上使用 lambda 表达式。 遗憾的是,除了 lambda 表达式之外,Java 8 功能并非如此 目前由 RetroLambda 支持,但 lambda 表达式的概念 是 Java 8 平台上最大的飞跃,它是一个很好的工具 无论如何,Android 开发人员。
有关此库的详细信息,请访问其 GitHub 页面:
https://github.com/orfjackal/retrolambda#getting-started
此外,还有另一位开发人员创建的用于 RetroLambda 的 Gradle 插件 允许在 Java 或 Android 中实现基于 Gradle 的构建 项目。但是,开发人员只提到了集成这个 插件添加到 Android Studio 环境中。详细信息可以在其上找到 GitHub 页面:
https://github.com/evant/gradle-retrolambda
在基于 Eclipse 的开发中使用这些基础结构 环境不能直接接近,但它是可行的,而且会是 在本指南中进行了演示。
制备
本指南假设读者对 Android 开发有基本的了解,并且它基于 ADT 版本 22.6.2,因为最近的 ADT 版本 23.0.2 似乎存在布局文件夹创建等问题。有关此问题的详细信息,请访问以下链接:
http://code.google.com/p/android/issues/detail?id=72591
本指南中的步骤将针对 Windows 8.1 64 位开发计算机提供,但它们可以很容易地适应其他平台。新的构建系统将用于构建/清理过程,还将提供其安装程序。此外,两者必须在开发计算机上共存。安装它们时必须遵循以下步骤:Gradle
JDK 8
JDK 7
- 转到 JDK 8 抢先体验预览页面 http://jdk8.java.net
- 下载 JDK 8u20 并安装它。JRE 8 安装不是必需的,可以跳过
- 转到 JDK 7 最新稳定版本页面 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
- 下载 JDK 7u65 并安装它。JRE 7 安装同样不是必需的,可以跳过
- 将 JDK 8 主文件夹和 JDK 8 文件夹添加到变量中
bin
%PATH%
- 使用 JDK 8 主文件夹的路径值创建新的环境变量
JAVA_HOME
- 使用 JDK 8 主文件夹的路径值再次创建一个新的环境变量
JAVA8_HOME
- 使用 JDK 7 主文件夹的路径值创建一个新的环境变量
JAVA7_HOME
- 打开终端窗口并运行命令并验证 Java 8 是否已启动并正在运行
java -version
- 在同一窗口中运行命令,并验证 JDK 8 Java 编译器是否也已启动并运行
javac -version
现在,必须从以下链接下载ADT-22.6.2:
http://dl.google.com/android/adt/22.6.2/adt-bundle-windows-x86_64-20140321.zip
- 下载 ADT 并将其内容解压缩到一个文件夹中,例如
D:\adt
- 定义一个新的环境变量,该变量以 ADT 安装文件夹的路径值调用,例如
ANDROID_HOME
D:\adt\sdk
- 添加您的和文件夹,例如 和 ,添加到您的变量
Android SDK Platform Tools
Android SDK Tools
D:\adt\sdk\tools
D:\adt\sdk\platform-tools
%PATH%
- 如果您愿意,可以创建 Eclipse IDE 的快捷方式。它位于您的 ADT 安装文件夹下,例如
D:\adt\eclipse
- 运行 Eclipse IDE 并创建一个工作区,例如
D:\adt\workspace
- 单击工具栏上的按钮
Android SDK Manager
- 选择“且仅”。取消选择其他所有内容并安装这两个软件包。
Android SDK Build tools Rev. 19.1
Android Support Library
如果一切顺利,ADT 将启动并运行。
还强烈建议安装以下工具:
Eclipse Kepler Java 8 支持:它使 Eclipse 能够识别新的 Java 8 语法扩展,并让您摆脱 Java 代码编辑器中的烦人。它可能在 Eclipse 中安装。在字段中输入 http://download.eclipse.org/eclipse/updates/4.3-P-builds/ 并继续安装。
red dots
Help -> Install New Software
Work with
Nodeclipse/Enide Gradle:主要用于突出显示 Groovy 语言关键字。Groovy 用作 Gradle 构建脚本的 DSL。这个插件可以通过 安装。但是,ADT-22.6.2 中的 Eclipse 不附带 .因此,您首先需要通过Eclipse中的工具进行安装。在字段中输入 http//:d ownload.eclipse.org/mpc/kepler/ 并继续安装它。安装后,您可以在 中搜索并安装它。
Eclipse Marketplace
Eclipse Marketplace Client
Eclipse Marketplace Client
Install New Software
Work with
Eclipse Marketplace Client
Nodeclipse/Enide Gradle
Eclipse Marketplace Client
Genymotion 虚拟设备:它是 ADT 附带的默认值的绝佳替代品。AVD 非常麻烦,而且会无缘无故地崩溃。Genymotion 让您使用 Oracle VirtualBox 执行的映像来准备 Android VD。它的单用户许可证是免费的,可以从 http://www.genymotion.com 下载。只需要登录,也可以集成到 Eclipse 中。详情请见:
Android Virtual Device
CyanogenMod
https://cloud.genymotion.com/page/doc/#collapse8
下面是基于Android 4.3的CyanogenMod虚拟设备的屏幕截图,
它可能被视为在基于 x86 或 x64 的个人计算机上运行的成熟 Android 设备。为了像在此虚拟设备上一样使用 Google 服务,必须将其使用的 Android 版本的图像刷写到设备上。可以从CyanogenMod网站下载设备的正确图像:Google PlayStore
gapps
gapps
http://wiki.cyanogenmod.org/w/Google_Apps
Gradle 安装是可选的,因为它也由 Android SDK 本身提供,但强烈建议单独安装。可以按照以下步骤进行安装:
转到 Gradle 网站:http://www.gradle.org/
点击
Downloads
在选择版本 1.10 下,下载 gradle-1.10-all.zip 或 gradle-1.10-bin.zip
Previous Releases
将其内容解压缩到文件夹中,例如
D:\adt\gradle
定义一个新的环境变量,该变量使用 Gradle 安装文件夹的路径值调用,例如
GRADLE_HOME
D:\adt\gradle
将 Gradle 二进制文件文件夹(例如 )添加到变量中
D:\adt\gradle\bin
%PATH%
打开终端窗口并运行命令并验证它是否已启动并运行 如果您已经成功达到这一点,那么这意味着您已准备好使用 Java 8 功能创建您的第一个 Android 应用程序。
gradle -v
演示应用程序
将创建一个简单的应用程序来演示上一节中描述的工具的用法。 您只需按照以下步骤操作,即可深入了解在 Android 开发者工具中使用 lambda 表达式:
- 运行 Eclipse IDE 并通过选择
File -> New -> Other -> Android -> Android Application Project
- 填写如下所示的表格:
只需单击以下表格上的按钮,然后单击最后一个表格上的按钮即可。等到 ADT 完成加载项目
Next
Finish
右键单击项目,然后选择并命名它
New -> Folder
builders
右键单击该文件夹并将其删除。Gradle 将很快为我们生成相同的文件,我们将将它们添加到默认 Ant 构建器创建的 projectgen 文件夹中,不再需要,并且该文件夹下的工件将过时
gen (Generated Java Files)
s build path. The
在文件夹下创建以下批处理文件:
builders
- gradle_build.cmd - gradle_post_build.cmd - gradle_clean.cmd
按如下方式填写这些批处理文件:
gradle_build.cmd:
gradle_post_build.cmd:
gradle_clean.cmd:
- 取消选择菜单选项
Project -> Build Automatically
- 右键单击项目,然后选择并取消选择 ADT 提供的所有默认构建器
Properties -> Builders
- 单击同一窗口中的按钮,然后选择并单击
New
Program
OK
- 将出现新的构建器配置窗口。按如下方式填写其选项卡:
主要
新构建器配置的选项卡
刷新
新构建器配置的选项卡
环境
新构建器配置的选项卡
构建选项
新构建器配置的选项卡
- 创建第二个用作其程序的生成器,称为该生成器。此构建器的所有其他设置必须与之前创建的构建器完全相同。此生成器将负责将生成过程创建的工件复制到文件夹中。
Gradle_Post_Build
gradle_post_build.cmd
bin
- 创建第三个用作其程序的构建器。只有最后一个选项卡中的设置必须设置为 。此生成器的所有其他设置必须与第一个生成器完全相同。顾名思义,此生成器将负责清理生成过程创建的工件。
Gradle_Cleaner
gradle_clean.cmd
Run the builder
During a Clean
HelloLambda
项目的新构建者
- 右键单击项目,然后选择
Export
- 选择并单击
Android -> Generate Gradle Build Files
Next
- 在下一个窗口中选择项目,然后单击
Finish
- 转到项目的根文件夹并删除文件和 .同时删除文件夹
gradlew
gradlew.bat
gradle
- 切换回 Eclipse 并选择菜单选项。填写如下所示的表单:
Project -> Clean
清洁项目
窗
- 单击并等待清洁过程完成
OK
- 在类中调用函数后立即添加下面给出的 Java 代码片段:
setContentView
MainActivity
- 将文件的开头更改为该部分,如下所示:
build.gradle
sourceCompatibility
- 右键单击项目并选择选项,并将所有合规性级别设置为 Java 8。这将使 Eclipse 能够识别新的 Java 8 结构,如 lambda 表达式。
Properties -> Java Compiler
- 单击通知窗口
No
- 右键单击项目,然后选择 。Eclipse 将开始构建项目。
Build project
构建过程
右键单击该项目,然后转到 。将以下文件夹添加到生成路径(也如下图所示):
Properties -> Java Build Path
build\source\buildConfig\debug
build\source\r\debug
Eclipse 现在将能够识别 和 文件,并且不会显示任何表示与项目资源文件相关的错误。R.java
buildConfig.java
red dots
- 右键单击项目,然后选择 ,为您的 Android 目标平台创建一个新平台。例如,这个演示应用程序在 Genymotion VD 上如下所示:
Run Configuration
Run As -> Run Configurations
HelloLambda 应用程序
您可能会在窗口中观察到,带有简单 lambda 表达式的代码片段可以正常工作LogCat
来源:在 Android 开发者工具中使用 Java 8 Lambda 表达式
评论
是的,Android 现在支持 Java 8 (24.1.17)
现在有可能了
但是您需要让您的设备 rom 在 java 1.8 上运行并启用“jackOptions”来运行它。 Jack 是运行 Java 8 的新 Android 编译器的名称
https://developer.android.com/guide/platform/j8-jack.html
将这些行添加到build_gradle
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Java 8 似乎是 Android Studio 2.0 的运行 java 引擎, 但是我检查后它仍然不接受 java 8 的语法,现在无法从 android studio 中选择编译器。但是,如果您需要在 android 客户端中使用函数式编程机制,则可以使用 scala 插件。
评论
我们可以通过以下方式使用 Java 8:
在 build.gradle (Project: myProject) 中添加以下内容
classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
在 build.gradle (Module: myModule) 中添加以下内容
apply plugin: 'me.tatarka.retrolambda' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
评论
当我在大约 2 年前问这个问题时,答案确实是“官方”否定的,但正如 ekcr1 的回答所指出的那样,如果您使用 retrolamba,您可以获得最受期待的功能之一 (lambdas)。当时我还在使用 eclipse,因为 Android Studio 处于“预览”模式,所以我从未走这条路。
今天,我认为“官方”的答案仍然是否定的,虽然 retrolamba 似乎仍然是一个不错的选择,但对于那些愿意走一条有点“非官方”路线的人来说,还有另一种选择,那就是 Kotlin。
今天 Kotlin 达到了 1.0.0。对于那些不熟悉 Kotlin 的人,可以在他们的网站上找到更多信息:
或观看杰克·沃顿(Jake Wharton)的演讲视频
https://www.youtube.com/watch?v=A2LukgT2mKc
Android 从 Android N 开始正式支持 Java 8。
特性发布在这里,Java 8 语言发布是:
改进了 Java 8 语言支持 - 我们很高兴将 Java 8 语言功能引入 Android。使用 Android 的 Jack 编译器,您可以 现在使用许多流行的 Java 8 语言功能,包括 lambda 和 更多,在 Android 版本上,最早可以追溯到 Gingerbread。新功能 帮助减少样板代码。例如,lambda 可以替换 提供事件侦听器时的匿名内部类。一些 Java 8 语言功能 -- 如默认和静态方法、流和 功能接口 -- 现在也可用于 N 及更高版本。跟 Jack,我们期待更密切地跟踪 Java 语言 同时保持向后兼容性。
评论
点击此链接获取最新更新。使用 Java 8 语言功能
旧答案
从 Android N 预览版开始,Android 支持 Java 8 的有限功能,请参阅 Java 8 语言功能
要开始使用这些功能,您需要下载并设置 Android Studio 2.1 和 Android N 预览版 SDK,其中包括 需要 Jack 工具链和更新的 Android Plugin for Gradle。如果你 尚未安装 Android N 预览版 SDK,请参阅设置以进行开发 适用于 Android N。
支持的 Java 8 语言特性和 API
Android 目前不支持所有 Java 8 语言功能。 但是,现在在开发应用程序时可以使用以下功能 以 Android N 预览版为目标:
Lambda 表达式(也可用于 API 级别 23 及更低级别)
方法参考(也可用于 API 级别 23 及更低级别)
Android 还支持一些额外的 Java 8 功能,您可以从 Java 8 语言功能中看到完整的详细信息
更新
注意:Android N 的 lambda 表达式实现基于 匿名类。这种方法允许他们向后 在早期版本的 Android 上兼容并可执行。测试 Lambda 表达式,记得转到 build.gradle 文件,并将 compileSdkVersion 和 targetSdkVersion 设置为 23 或更低。
更新 2
现在 Android Studio 3.0 稳定版支持 Java 8 库和 Java 8 语言功能(没有 Jack 编译器)。
评论
minSdkVersion
原生 Java 8 登陆 android!最后!
从每个模块的 build.gradle 文件:
要禁用 Jack 并切换到默认工具链,只需删除 jackOptions 块,来自模块的 build.gradle 文件
要开始使用受支持的 Java 8 语言功能,请将 Android 插件更新到 3.0.0(或更高版本)
从 Android Studio 3.0 开始,Android 现在原生支持 Java 8 语言功能:
- Lambda 表达式
- 方法引用
- 类型注解(目前类型注解信息在运行时不可用,而仅在编译时可用);
- 重复批注
- 默认和静态接口方法(在 API 级别 24 或更高版本上,不支持即时运行);
此外,从最低 API 级别 24 开始,以下 Java 8 API 可用:
- java.util.stream
- java.util.函数
- java.lang.FunctionalInterface
- java.lang.annotation.Repeatable
- java.lang.reflect.AnnotatedElement.getAnnotationsByType(类)
- java.lang.reflect.Method.isDefault()
将这些行添加到应用程序模块的 build.gradle 中,以通知项目语言级别:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
通过将以下内容添加到 gradle.properties 文件来禁用对 Java 8 语言功能的支持:
android.enableDesugar=false
大功告成!您现在可以使用原生 java8!
最新消息:
谷歌宣布,在 Android N 和 Android Studio 2.1+ 中,平台将支持 Java 8。此外,还发布了 studio 2.1 的稳定版本。
最后,我们可以使用 lambda 表达式。for 循环中不再有列表筛选器。霍里伊。
我在 Stack Overflow 上写了一个类似的问题,但这是该答案的一部分。
Android Studio 2.1:
新版本的 Android Studio (2.1) 支持 Java 8 功能。以下是 Android 开发者博客文章的摘录:
...Android Studio 2.1 版本支持新的 Jack 编译器和 Java 8。
...
若要在使用 N Developer Preview 进行开发时使用 Java 8 语言功能,需要使用 Jack 编译器。新建项目向导 [File→ New→ Project] 为面向 N 的项目生成正确的配置。
Android Studio 2.1 之前的版本:
Android 尚不支持 Java 1.8(最高仅支持 1.7),因此您不能使用 lambda 等 Java 8 功能。
此答案提供了有关 Android Studio 兼容性的更多详细信息;它指出:
如果你想使用 lambdas,这是 Android 中 Java 8 的主要特性之一,你可以使用 gradle-retrolamba
如果您想了解更多关于使用的信息,这个答案提供了很多关于这样做的细节。gradle-retrolambda
评论
"SDK Location"
"/Users/me/Library/Android/sdk"
添加此配置 build.gradle 并同步 gradle:
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
// or
//sourceCompatibility 1.8
//targetCompatibility 1.8
}
}
评论
我想我会为那些寻找更现代的东西的人发布一个更新的答案。
目前,Android 和 Android Studio 支持 Java 8 功能的一部分。根据其网站上的 Android 文档,谷歌说:
对 Java 8 语言特性的支持需要一个名为 Jack 的新编译器。Jack 仅在 Android Studio 2.1 及更高版本上受支持。因此,如果您想使用 Java 8 语言功能,则需要使用 Android Studio 2.1 来构建您的应用。
如果您已经安装了 Android Studio,请确保点击帮助 > 检查更新(在 Mac 上,点击 Android Studio >检查更新),确保更新到最新版本。如果您的工作站上尚未安装 IDE,请在此处下载 Android Studio。
支持的 Java 8 语言特性和 API
Android 不支持所有 Java 8 语言功能。但是,在开发以 Android 7.0(API 级别 24)为目标平台的应用时,可以使用以下功能:
- 默认和静态接口方法 Lambda 表达式(也可用于 API 级别 23 及更低级别)
- 可重复的注释
- 方法参考(也可用于 API 级别 23 及更低级别)
- 类型注释(也可用于 API 级别 23 及更低级别)
此外,还提供以下 Java 8 语言 API:
反射和语言相关 API:
- java.lang.FunctionalInterface
- java.lang.annotation.Repeatable
- java.lang.reflect.Method.isDefault() 和与可重复注释关联的反射 API,例如 AnnotatedElement.getAnnotationsByType(类)
实用程序 API:
- java.util.函数
- java.util.stream
为了使用新的 Java 8 语言功能,您还需要使用 Jack 工具链。这个新的 Android 工具链将 Java 语言源代码编译为 Android 可读的 DEX 字节码,具有自己的 .jack 库格式,并将大多数工具链功能作为单个工具的一部分提供:重新打包、收缩、混淆和 multidex。
以下是用于构建 Android DEX 文件的两个工具链的比较:
Legacy javac toolchain: javac (.java → .class) → dx (.class → .dex) New Jack toolchain: Jack (.java → .jack → .dex)
Google 刚刚宣布 Android 将原生支持 Java 8,并且 Jack 工具链将弃用:
我们决定将对 Java 8 语言特性的支持直接添加到当前的 javac 和 dx 工具集中,并弃用 Jack 工具链。有了这个新方向,依赖于 Java 类文件格式的现有工具和插件应该可以继续工作。展望未来,Android 构建系统将原生支持 Java 8 语言功能。我们的目标是在未来几周内将其作为 Android Studio 的一部分推出,我们希望尽早与您分享这一决定。
更多信息在这里: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html
是的。我们很快就会使用 Java 8!
我们决定将对 Java 8 语言特性的支持直接添加到当前的 javac 和 dx 工具集中,并弃用 Jack 工具链。有了这个新方向,依赖于 Java 类文件格式的现有工具和插件应该可以继续工作。展望未来,Android 构建系统将原生支持 Java 8 语言功能。我们的目标是在未来几周内将其作为 Android Studio 的一部分推出,我们希望尽早与您分享这一决定。
https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html
更新 2020/01/17
Android Studio 4.0 支持使用多种 Java 8 语言 API,通过使用称为脱糖的技术,而无需为您的应用设置最低 API 级别:
https://developer.android.com/studio/preview/features#j8-desugar
此版本支持以下一组 API:
- 顺序流 (
java.util.stream
)- 的子集
java.time
java.util.function
- 最近添加的
java.util.{Map,Collection,Comparator}
- 可选的 (和 ) 和其他一些对 以上 API
java.util.Optional
java.util.OptionalInt
java.util.OptionalDouble
- 对 (上 和 的新方法
java.util.concurrent.atomic
AtomicInteger
AtomicLong
AtomicReference
)ConcurrentHashMap
(修复了 Android 5.0 的错误)为了支持这些语言 API,D8 编译了一个单独的库 DEX 文件,其中包含缺少的 API 的实现,并包括 它在您的应用程序中。脱糖过程将应用的代码重写为 而是在运行时使用此库。
若要启用对这些语言 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' }
2017年的原始帖子
Android Studio 3.0 开始为一些 Java 8 语言功能提供内置支持,这些功能包括:
- Lambda 表达式
- 方法引用
- 类型注释(信息在编译时可用,但在运行时不可用)
- 重复批注
- 默认和静态接口方法
此外,从 API 级别 24 开始,可以使用以下 Java 8 API:
java.util.stream
java.util.function
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
java.lang.reflect.Method.isDefault()
除此之外,支持已扩展到所有 Android API 级别。try-with-resources
未来将添加更多Java 8功能。
要开始使用受支持的 Java 8 语言功能,请更新 Android 插件到 3.0.0-alpha1(或更高版本),并将以下内容添加到 模块的 build.gradle 文件:
android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
欲了解更多详情,请访问:
https://developer.android.com/studio/write/java8-support.html
评论
2.4.0-alpha6
我在 3 年前问过这个问题,显然多年来答案发生了变化。正如上面许多人已经回答的那样,从前段时间开始,答案变成了“是”。我从未更新过接受的答案,因为它是当时的正确答案。(我不确定 Stack Overflow 策略是什么)
我只是想为那些仍在搜索此主题的人添加另一个答案。截至 2017 年 5 月 17 日,Google 还宣布 Kotlin 也是 Android 开发的官方语言。
我还没有找到官方新闻稿,但我确实观看了一些宣布它的 Google I/O 视频。这是 Kotlin 团队关于该公告的博客文章的链接。
添加以下内容为我解决了问题(Android Studio 2.3.2):
build.gradle (项目)
buildscript {
repositories {
...
jcenter()
}
dependencies {
...
classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
...
}
}
build.gradle (模块: app)
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
} // SET JAVA VERSION
...
}
Android Studio 现在支持 Java 8 的一个子集。只需从下面的窗口中进行源和目标兼容性调整:
文件 --> 项目结构
更多信息在下面的链接中给出。
https://developer.android.com/studio/write/java8-support.html
简单易行
您可以为 android 项目启用 java 1.8 支持。
开放式项目结构
要么按Ctrl + Shift + Alt + S
或
文件>项目结构
在“项目结构”对话框中将“源兼容性”和“目标兼容性”更新为 1.8,如下所示(单击“文件”>“项目结构”)。
或者你可以使用 gradle
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
同步项目。就是这样!
注意:可以在 Android Studio 3.0.0 或更高版本中启用 Java 1.8 支持。有关进一步阅读,请参阅文档。
评论
将此行添加到模块 lvl build gradel 中
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
上述所有解决方案似乎都不适用于2019年最新的Android Studio 3.4 +。
我想出了一个完美且最新的解决方案,可以将您的 Android 项目迁移或升级到 Java 8。
溶液:单击“文件”-“>”项目结构“-”>模块“-”>属性“选项卡。
将”源兼容性“和”目标兼容性“更改为 1.8 (Java 8)
更新 2019/10/28
D8 编译器在编译时将 Java 8 原生 API 的向后移植修补到 APK 中,您的应用将在运行时使用该代码,而不是原生 API。该过程称为脱糖。
是的,您可以在 Android Studio 中使用 Java 8 语言功能,但版本必须为 3.0 或更高版本。阅读本文,了解如何在 android studio 中使用 java 8 功能。
https://bijay-budhathoki.blogspot.com/2020/01/use-java-8-language-features-in-android-studio.html
添加 Java 8 支持的最简单方法
compileOptions {
targetCompatibility = '1.8'
sourceCompatibility = '1.8'
}
只需将其添加到您的 build.gradle 文件中即可。
评论
Android Gradle 插件 3.0.0 及更高版本支持所有 Java 7 语言功能以及部分 Java 8 语言功能,这些功能因平台版本而异。使用 Android Gradle 插件 4.0.0 及更高版本构建应用时,您可以使用多种 Java 8 语言 API,而无需为应用设置最低 API 级别。
本页介绍了您可以使用的 Java 8 语言功能、如何正确配置项目以使用它们,以及您可能遇到的任何已知问题。
对于本文将为您提供帮助。我会把链接放在下面 https://developer.android.com/studio/write/java8-support
容易记住的答案
在android studio中,单击项目结构图标,然后进入模块/应用程序,然后将Source Compatibility和Target Compatibility更改为1.8,然后按Ok。
评论