在网上搜索,尚不清楚 Android 开发是否支持 Java 8。
在我下载/设置 Java 8 之前,有人可以指出我在任何“官方”文档中说明 Java 8 是否支持 Android 开发。
2017 年 11 月 4 日更新 - Android Studio 3.0 现在原生支持 Java 8。 现在不再需要 gradle-retrolambda
。请参阅https://developer.android.com/studio/write/java8-support.html
如果您使用 gradle-retrolambda
,上述链接还包括迁移说明。原答案如下:
Android 不支持 Java 8。它只支持 Java 7(如果你有 kitkat)并且仍然没有 invokedynamic,只有新的语法糖。
如果您想使用 lambda(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 功能来代替官方支持,这是一个 hack。
爪哇 8
Android 支持所有 Java 7 语言功能和 Java 8 语言功能的子集,这些功能因平台版本而异。
检查支持 java 8 的哪些功能
我们决定将对 Java 8 语言特性的支持直接添加到当前的 javac 和 dx 工具集中,并弃用 Jack 工具链。有了这个新的方向,依赖于 Java 类文件格式的现有工具和插件应该可以继续工作。展望未来,Android 构建系统将原生支持 Java 8 语言功能。我们的目标是在未来几周内将其作为 Android Studio 的一部分推出,我们希望尽早与您分享这一决定。
Future of Java 8 Language Feature Support on Android
日食用户:
对于喜欢 Eclipse 的老开发人员,google stops support Eclipse Android Developer tools
如果您安装了 Java 8 JDK,请尝试一下,如果出现任何问题,请尝试在 Eclipse 中从窗口菜单 → 首选项 → Java → 编译器将编译器设置为 1.6。 Java 7 也可以:
https://i.stack.imgur.com/SCTyV.png
如果您的目标是 Android 5.0 或更高版本,则需要 Java 7 或更高版本。
安装多个JDK并尝试。
您确实可以使用 gradle-retrolamba
gradle build 依赖项来使用 Java 8 进行 Android 开发。
下面是我最近遵循的为 Android 开发运行 lambda 表达式的完整指南。最后提到了本指南的原始来源。
在本指南中,将演示一种将一些 Java 8 功能引入 Android 开发工具的方法,特别针对 Eclipse IDE。但是,将在本指南中描述的步骤也可能适用于 Google 的新开发环境 Android Studio。它基于 JetBrains 流行的 IntelliJ Idea IDE 的社区版,最近在 2014 年 7 月上旬由 Google 升级到其“测试版”,略早于编写本指南。 Eclipse 至少在一段时间内仍将是主要的开发环境,考虑到大多数 Android 项目都是使用 Eclipse 开发的,一种将 Java 8 新特性(如 lambda 表达式)引入 ADT 的方法似乎对开发人员非常有用。 Android 开发基于一个名为 Apache Harmony Project 的自定义 Java 实现,该实现于 2011 年终止。Android 开发中最常用的 Java 语法是 Java 6 (v1.6),Java 7 (v1.7) 也部分支持KitKat 版本 (Android 4.4.+)。因此,如果不对开发工具进行一些调整,就不能直接在 Android 应用程序开发中使用 Java 8 功能(如 lambda 表达式)。幸运的是,这些构造基本上是一些“语法糖”的增强,它为开发人员提供了诸如“匿名类”之类的缺点,它们可以被翻译成 Java 6 或 Java 7 类。最近有一种将 Java 8 源代码转换为较低 Java 版本的方法称为 RetroLambda。该库使开发人员可以在 Java 7 甚至更低版本上使用 lambda 表达式运行 Java 8 代码。不幸的是,RetroLambda 目前不支持除 lambda 表达式之外的 Java 8 功能,但 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 -version 命令并验证 Java 8 是否已启动并正在运行
在同一窗口中运行 javac -version 命令并验证 JDK 8 Java 编译器是否也已启动并运行
现在,必须从以下链接下载 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 代码编辑器中恼人的红点。它可以通过 Help -> Install New Software in Eclipse 安装。在 Work with 字段中输入 http://download.eclipse.org/eclipse/updates/4.3-P-builds/ 并继续安装它。
Nodeclipse/Enide Gradle:主要用于高亮Groovy语言关键字。 Groovy 用作 Gradle 构建脚本的 DSL。这个插件可以通过 Eclipse Marketplace 安装。但是,ADT-22.6.2 中的 Eclipse 不与 Eclipse Marketplace Client 一起提供。因此,您首先需要通过 Eclipse 中的 Install New Software 工具安装 Eclipse Marketplace Client。在 Work with 字段中输入 http//:download.eclipse.org/mpc/kepler/ 并继续安装它。安装 Eclipse Marketplace Client 后,您可以在 Eclipse Marketplace Client 中搜索 Nodeclipse/Enide Gradle 并安装。
Genymotion 虚拟设备:它是 ADT 附带的默认 Android 虚拟设备的一个很好的替代品。 AVD 非常麻烦,而且它会无缘无故地崩溃。 Genymotion 让您使用由 Oracle VirtualBox 执行的 CyanogenMod 图像准备 Android VD。它的单用户许可证是免费的,可以从 http://www.genymotion.com 下载。只需要登录,也可以集成到 Eclipse 中。详情可参见:
https://cloud.genymotion.com/page/doc/#collapse8
下面是基于 Android 4.3 的 CyanogenMod 虚拟设备的屏幕截图,
https://i.stack.imgur.com/iow9j.png
它可能被视为在基于 x86 或 x64 的个人计算机上运行的成熟 Android 设备。为了在此虚拟设备上使用 Google PlayStore
等 Google 服务,必须将其使用的 Android 版本的 gapps
映像刷到设备上。可以从 CyanogenMod 网站下载适合设备的 gapps
映像:
http://wiki.cyanogenmod.org/w/Google_Apps
Gradle 安装是可选的,因为它也由 Android SDK 本身提供,但强烈建议单独安装。可以按照以下步骤进行安装:
转到 Gradle 网站:http://www.gradle.org/
点击下载
在 Previous Releases 下选择 1.10 版本并下载 gradle-1.10-all.zip 或 gradle-1.10-bin.zip
将其内容解压缩到一个文件夹中,例如 D:\adt\gradle
使用 Gradle 安装文件夹的路径值定义一个名为 GRADLE_HOME 的新环境变量,例如 D:\adt\gradle
将您的 Gradle 二进制文件夹,例如 D:\adt\gradle\bin,添加到您的 %PATH% 变量中
打开终端窗口并运行 gradle -v 命令并验证它是否已启动并运行如果您已成功完成这一点,则意味着您已准备好使用 Java 8 功能创建您的第一个 Android 应用程序。
演示应用
将创建一个简单的应用程序来演示上一节中描述的工具的使用。您可以简单地按照下面给出的步骤来深入了解在 Android 开发者工具中使用 lambda 表达式:
运行 Eclipse IDE 并通过选择 File -> New -> Other -> Android -> Android Application Project 创建一个新的 Android App
填写出现的表格,如下所示:
https://i.stack.imgur.com/JVoe4.png
只需单击以下表单上的“下一步”按钮,然后单击最后一个表单上的“完成”按钮。等到 ADT 完成加载项目
右键单击项目并选择 New -> Folder 并将其命名为 builders
右键单击 gen (Generated Java Files) 文件夹并将其删除。 Gradle 很快就会为我们生成相同的文件,我们会将它们添加到项目构建路径中。不再需要由默认 Ant 构建器创建的 gen` 文件夹,并且该文件夹下的工件将被废弃
在builders文件夹下创建以下批处理文件: - gradle_build.cmd - gradle_post_build.cmd - gradle_clean.cmd
填写这些批处理文件如下:
gradle_build.cmd:
https://i.stack.imgur.com/8cUqV.png
gradle_post_build.cmd:
https://i.stack.imgur.com/5zYJt.png
gradle_clean.cmd:
https://i.stack.imgur.com/YBqEe.png
取消选择项目 -> 自动构建菜单选项
右键单击项目并选择 Properties -> Builders 并取消选择 ADT 提供的所有默认构建器
单击同一窗口中的新建按钮并选择程序,然后单击确定
将出现新的构建器配置窗口。按如下方式填写其选项卡:
Main
新构建器配置选项卡
https://i.stack.imgur.com/w1Rw4.png
Refresh
新构建器配置选项卡
https://i.stack.imgur.com/YpGL5.png
Environment
新构建器配置选项卡
https://i.stack.imgur.com/0OSHU.png
Build Options
新构建器配置选项卡
https://i.stack.imgur.com/5BoyE.png
创建名为 Gradle_Post_Build 的第二个构建器,它使用 gradle_post_build.cmd 作为其程序。此构建器的所有其他设置必须与之前创建的构建器完全相同。此构建器将负责将构建过程创建的工件复制到 bin 文件夹中。
创建名为 Gradle_Cleaner 的第三个构建器,它使用 gradle_clean.cmd 作为其程序。只有在最后一个选项卡中运行构建器设置必须设置为在清洁期间。此构建器的所有其他设置必须与第一个构建器完全相同。顾名思义,这个构建器将负责清理由构建过程创建的工件。
HelloLambda
项目的新建设者
https://i.stack.imgur.com/0DC3V.png
右键单击项目并选择导出
选择 Android -> Generate Gradle Build Files 并点击 Next
在下一个窗口中选择项目,然后单击完成
转到项目的根文件夹并删除文件 gradlew 和 gradlew.bat。同时删除 gradle 文件夹
切换回 Eclipse 并选择 Project -> Clean 菜单选项。填写显示如下的表格:
Clean Project
窗口
https://i.stack.imgur.com/Yn4Sz.png
单击确定并等待清洁过程完成
在 MainActivity 类中调用 setContentView 函数之后添加下面给出的 Java 代码片段:
https://i.stack.imgur.com/XqeCX.png
将 build.gradle 文件的开头更改为 sourceCompatibility 部分,如下所示:
https://i.stack.imgur.com/GSS1F.png
右键单击项目并选择 Properties -> Java Compiler 选项并将所有合规级别设置为 Java 8。这将使 Eclipse 识别新的 Java 8 结构,如 lambda 表达式。
在通知窗口中单击否
右键单击项目并选择构建项目。 Eclipse 将开始构建项目。
https://i.stack.imgur.com/1JNEM.png
右键单击该项目并转到 Properties -> Java Build Path。将以下文件夹添加到构建路径(也如下图所示): build\source\buildConfig\debug build\source\r\debug
构建\源\buildConfig\调试
构建\源\r\调试
https://i.stack.imgur.com/q5Yiv.png
Eclipse 现在能够识别 R.java
和 buildConfig.java
文件,并且不会显示任何 red dots
表示与项目的资源文件相关的错误。
右键单击项目,然后选择 Run As -> Run Configurations,为您的 Android 目标平台创建一个新的运行配置。例如,这个演示应用程序在 Genymotion VD 上如下所示:
HelloLambda 应用程序
https://i.stack.imgur.com/9paAZ.png
您可能会在 LogCat
窗口中观察到带有简单 lambda 表达式的代码片段可以正常工作
https://i.stack.imgur.com/6lYDI.png
来源:Using Java 8 Lambda Expressions in Android Developer Tools
按照此链接获取新的更新。 Use Java 8 language features
旧答案
从 Android N preview 版本开始,Android 支持 Java 8 的有限 功能,请参阅 Java 8 Language Features
要开始使用这些功能,您需要下载并设置 Android Studio 2.1 和 Android N Preview SDK,其中包括所需的 Jack 工具链和更新的 Android Plugin for Gradle。如果您尚未安装 Android N Preview SDK,请参阅设置为 Android N 开发。
支持的 Java 8 语言功能和 API
Android 当前不支持所有 Java 8 语言功能。但是,在开发面向 Android N Preview 的应用程序时,现在可以使用以下功能:
Default and static interface methods
Lambda expressions(也适用于 API 级别 23 及更低级别)
Method References(也适用于 API 级别 23 及更低级别)
Android 支持一些额外的 Java 8 功能,您可以在 Java 8 Language Features 中查看完整的详细信息
更新
注意:Android N 基于匿名类实现 lambda 表达式。这种方法允许它们在早期版本的 Android 上向后兼容和执行。要在早期版本上测试 lambda 表达式,请记住转到您的 build.gradle 文件,并将 compileSdkVersion 和 targetSdkVersion 设置为 23 或更低。
更新 2
现在 Android Studio 3.0 稳定版支持 Java 8 libraries and Java 8 language features(没有 Jack 编译器)。
minSdkVersion
有什么要求吗?
是的,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 插件。
https://i.stack.imgur.com/XVIKB.png
Android 使用从 Java 6 分支出来的 Java。
从 Android SDK 版本 19 开始,您可以使用 Java 7 功能by doing this。还没有完全支持 Java 8。
原生 Java 8 登陆 Android!最后!
从每个模块的 build.gradle 文件中删除 Retrolambda 插件和 retrolambda 块:要禁用 Jack 并切换到默认工具链,只需从模块的 build.gradle 文件中删除 jackOptions 块
要开始使用受支持的 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.function
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
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 从 Android N 开始正式支持 Java 8。
Feature announcements are here,Java 8 语言公告是:
改进的 Java 8 语言支持 - 我们很高兴将 Java 8 语言功能引入 Android。借助 Android 的 Jack 编译器,您现在可以在 Gingerbread 等 Android 版本上使用许多流行的 Java 8 语言功能,包括 lambda 等。新功能有助于减少样板代码。例如,当提供事件监听器时,lambdas 可以替换匿名内部类。一些 Java 8 语言特性——比如默认和静态方法、流和函数式接口——现在也可以在 N 及更高版本上使用。对于 Jack,我们期待更密切地跟踪 Java 语言,同时保持向后兼容性。
我们可以通过以下方式使用 Java 8:
在 build.gradle (Project: myProject) 添加以下类路径 'me.tatarka:gradle-retrolambda:xxx' //xxx 是最新版本 在 build.gradle (Module: myModule) 添加以下应用插件:'me.tatarka.retrolambda' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
更新 2020/01/17
Android Studio 4.0 包括对使用多种 Java 8 语言 API 的支持,通过使用称为脱糖的技术,无需为您的应用提供最低 API 级别:
{1 }
此版本支持以下 API 集: 顺序流 (java.util.stream) java.time java.util.function 的子集 java.util.{Map,Collection,Comparator} 的最新添加选项 (java.util .Optional、java.util.OptionalInt 和 java.util.OptionalDouble) 和其他一些对上述 API 有用的新类 java.util.concurrent.atomic 的一些补充(AtomicInteger、AtomicLong 和 AtomicReference 上的新方法) ConcurrentHashMap(带有错误修复对于 Android 5.0)为了支持这些语言 API,D8 编译了一个单独的库 DEX 文件,其中包含缺少的 API 的实现并将其包含在您的应用程序中。脱糖过程会重写您的应用程序代码,以在运行时使用此库。要启用对这些语言 API 的支持,请在模块的 build.gradle 文件中包含以下内容: true // 将 Java 兼容性设置为 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()
除此之外,try-with-resources
支持已扩展到所有 Android API 级别。
承诺将来会添加更多 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
)。请检查答案中的引用块。
简单的方法
您可以为 android 项目启用 java 1.8 支持。
通过按 Ctrl + Shift + Alt + S 或 File > Project Structure 打开项目结构
通过按 Ctrl + Shift + Alt + S
或文件 > 项目结构
如图所示,在 Project Structure 对话框中将 Source Compatibility 和 Target Compatibility 更新为 1.8(单击 File > Project Structure)。
https://i.stack.imgur.com/bf2FY.png
或者你可以使用 gradle
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
同步项目。就是这样!
注意:可以为 Android Studio 3.0.0 或更高版本启用 Java 1.8 支持。如需进一步阅读,请参阅 Documentation。
大约 2 年前,当我问这个问题时,答案确实是“官方”不,但正如 ekcr1 的回答所指出的那样,如果您使用retrolamba,您可以获得最受期待的功能之一(lambdas)。当时我还在用eclipse,因为Android Studio处于“预览”模式,所以我从来没有走这条路。
今天,我认为“官方”的答案仍然是否定的,虽然 retrolamba 似乎仍然是一条不错的路,但对于那些愿意走一条有点“非官方”的路线的人来说,还有另一种选择,即 Kotlin。
今天 Kotlin 达到了 1.0.0。对于那些不熟悉 Kotlin 的人,可以在他们的网站上找到更多信息:
或观看杰克·沃顿 (Jake Wharton) 演讲的 utube 视频
https://www.youtube.com/watch?v=A2LukgT2mKc
最新消息:
Google 宣布 Android N 和 Android Studio 2.1+ 平台将支持 Java 8。还发布了稳定版的 studio 2.1。
最后我们可以使用 lambda 表达式。 for 循环中不再有列表过滤器。好啦。
添加此配置 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
}
}
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
将此行添加到模块 lvl buildgradel
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
更新 2019/10/28
Android Studio 4.0 解决了这个 issue。
D8 编译器在编译时将 Java 8 本机 API 的反向移植修补到您的 APK 中,您的应用程序将在运行时使用该代码,而不是本机 API。该过程称为 desugaring。
我在 Stack Overflow 上给 similar question 写了一个 similar answer,但这是答案的一部分。
安卓工作室 2.1:
新版 Android Studio (2.1) 支持 Java 8 功能。以下是 Android Developers blogspot post 的摘录:
... 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),因此您不能使用 Java 8 的特性,如 lambdas。
This answer gives more detail on Android Studio's compatibility;它指出:
如果你想使用 lambdas,Android 中 Java 8 的主要特性之一,你可以使用 gradle-retrolamba
如果您想了解有关使用 gradle-retrolambda
的更多信息,this answer gives a lot of detail on doing that。
"SDK Location"
(这是在 Mac FWIW 上)只是说"/Users/me/Library/Android/sdk"
我在使用 Java8 - 如何使用 Java8?谢谢!
我想我会为那些寻找更新的东西的人发布一个更新的答案。
目前,Android 和 Android Studio 支持 Java 8 功能的子集。根据位于 on their website 的 Android 文档,Google 说:
支持 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(Class) 实用 API:java .util.function java.util.stream 为了使用新的 Java 8 语言特性,您还需要使用 Jack 工具链。这个新的 Android 工具链将 Java 语言源代码编译为 Android 可读的 DEX 字节码,拥有自己的 .jack 库格式,并作为单个工具的一部分提供大多数工具链功能:重新打包、收缩、混淆和 multidex。以下是用于构建 Android DEX 文件的两个工具链的比较: 传统 javac 工具链:javac (.java → .class) → dx (.class → .dex) 新 Jack 工具链:Jack (.java → .jack → .dex )
添加以下内容为我解决了这个问题(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://i.stack.imgur.com/udegk.png
更多信息在下面的链接中给出。
https://developer.android.com/studio/write/java8-support.html
添加 Java 8 支持的最简单方法
compileOptions {
targetCompatibility = '1.8'
sourceCompatibility = '1.8'
}
只需将其添加到您的 build.gradle 文件中。
以上所有解决方案似乎都不适用于 2019 年最新的 Android Studio 3.4+。
我想出了一个完美且最新的解决方案,将您的 Android 项目迁移或升级到 Java 8。
解决方案:点击文件 -> 项目结构 -> 模块 -> 属性选项卡。将源兼容性和目标兼容性更改为 1.8 (Java 8)
https://i.stack.imgur.com/rb3bE.png
是的,您可以在 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
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 点击项目结构图标然后进入 Modules/app 然后将 Source Compatibility 和 Target Compatibility 更改为 1.8 并按 Ok。
https://i.stack.imgur.com/b20jx.png
try-with-resources
仅适用于 Kitkat。