是否可以使用Java 8进行Android开发?

在网上搜索,还不清楚Android开发是否支持Java 8。

在我下载/安装Java 8之前,能不能有人给我指出任何“官方”文档,说Java 8是或不支持Android开发。

293873 次浏览

java 8

Android支持所有Java 7语言特性和Java 8语言特性的子集,这些特性因平台版本而异。

检查支持java 8的哪些功能

使用Java 8语言特性 .

我们已经决定将对Java 8语言特性的支持直接添加到当前的javac和dx工具集中,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该可以继续工作。接下来,Java 8语言特性将被Android构建系统原生支持。我们的目标是在未来几周内将其作为Android Studio的一部分发布,我们希望尽早与大家分享这一决定。

Java 8语言特性在Android上的未来支持

Eclipse用户:

对于喜欢Eclipse的老开发人员,谷歌停止支持Eclipse Android开发工具

如果你安装了Java 8 JDK,那么试一试,如果出现任何问题,尝试在Eclipse中从窗口菜单中将编译器设置为1.6→首选项Java编译器。 Java 7也将工作:

Eclipse Preferences ->Java→编译器”></p>


<blockquote>
<p>如果你的目标是Android 5.0和
高。< / p >
</blockquote>


<p>安装多个JDK并尝试。</p></div>
                                                                            </div>
                                </div>
                            </div>
                        </div>
                                                <div class=

更新2017/11/04 - Android Studio 3.0现在支持Java 8。 gradle-retrolambda现在不再需要。看到# EYZ2

如果您使用gradle-retrolambda,上面的链接还包括迁移说明。原答案如下:


Android不支持Java 8。它只支持到Java 7(如果你有kitkat),它仍然没有invokedynamic,只有新的语法sugar。

如果你想使用lambdas (Android中Java 8的主要特性之一),你可以使用gradle-retrolamba。它是一个gradle构建依赖,集成了retrolambda,一个将Java 8字节码转换回Java 6/7的工具。基本上,如果你在Android Studio中设置编译器来编译Java 8字节码,从而允许lambdas,它会将其转换回Java 6/7字节码,然后反过来转换为dalvik字节码。如果你想在Android中尝试一些JDK 8特性来代替官方支持,这是一个hack。

Android使用的Java是Java 6的分支。

从Android SDK版本19开始,您可以使用Java 7特性通过这样做。目前还没有完全支持Java 8。

你确实可以使用gradle-retrolamba gradle构建依赖来使用Java 8进行Android开发。

下面是我最近在Android开发中运行lambda表达式的完整指南。本指南的原始来源在最后被提到。

在本指南中,将一些Java 8特性引入到Java 8的方法 Android开发工具将被演示,专门针对 # EYZ0。然而,本指南中所描述的步骤也可能适用于谷歌的新起义发展 环境,Android Studio。它是基于社区版的 受欢迎的IntelliJ Idea IDE由JetBrains和它最近 2014年7月初,谷歌将其升级为“测试版” 在本指南撰写之前。Eclipse仍然是突出的 开发环境,至少在一段时间内,并考虑 事实上,大多数Android项目都是使用Eclipse开发的 方法来引入新的Java 8特性,比如lambda表达式 ADT似乎对开发人员非常有用 Android开发是基于一个自定义的Java实现 Apache Harmony项目于2011年终止。最 在Android开发中常用的Java语法是Java 6 (v1.6)和 KitKat版本也部分支持Java 7 (v1.7) (Android 4.4 +)。因此,Java 8具有lambda表达式等特性 不能直接在Android应用开发中使用 在开发工具中应用一些调整。幸运的是,这些 构念基本上是一些“语法糖”增强 给开发人员“匿名类”之类的缺点 它们可以被翻译成Java 6或Java 7类 最近一种将Java 8源代码转换为低Java的方法 版本名为RetroLambda。这个库使开发人员能够运行 在Java 7或更低版本上使用lambda表达式的Java 8代码。 不幸的是,除了lambda表达式之外,Java 8的其他特性都不是 现在是RetroLambda支持的,但是lambda表达式的概念 是Java 8平台上最大的飞跃,它是一个伟大的工具

关于这个库的详细信息可以在它的GitHub页面上找到:

https://github.com/orfjackal/retrolambda#getting-started

另外,另一个开发人员为RetroLambda创建的Gradle插件 允许基于gradle的构建在Java或Android中实现 项目。但是,开发人员只提到了集成这些功能 插件到Android Studio环境。详情可在其网站上找到 GitHub页面:< / p >

https://github.com/evant/gradle-retrolambda

在基于eclipse的开发中使用这些基础设施 环境问题不能直接解决,但这是可行的,也将是可行的

< h2 id = "准备" > <强>准备< /强> < / h2 >

本指南假定读者对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 8JDK 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%变量中
  • 创建一个新的环境变量JAVA_HOME,其值为JDK 8主文件夹的路径
  • 再次使用JDK 8主文件夹路径的值创建一个新的环境变量JAVA8_HOME
  • 创建一个新的环境变量JAVA7_HOME,其值为JDK 7主文件夹的路径
  • 打开终端窗口并运行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
  • 定义一个名为ANDROID_HOME的新环境变量,其值为ADT安装文件夹的路径,例如D:\adt\sdk
  • 添加您的Android SDK Platform ToolsAndroid SDK Tools文件夹,例如D:\adt\sdk\toolsD:\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.1Android Support Library。取消选择其他所有内容并安装这两个包。

如果一切顺利,ADT将开始运行。

同时,强烈建议安装以下工具:

  • Eclipse Kepler Java 8支持:它使Eclipse识别新的Java 8语法扩展,并使您摆脱Java代码编辑器中令人讨厌的red dots。它可以通过Eclipse中的Help -> Install New Software安装。在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 Virtual Device的一个很好的替代品。AVD是恼人的麻烦,它不断崩溃无缘无故。Genymotion让你准备Android VD使用CyanogenMod图像,由甲骨文VirtualBox执行。它的单用户许可证是免费的,可以从http://www.genymotion.com下载。只需要登录,它也可以集成到Eclipse中。详情如下:

https://cloud.genymotion.com/page/doc/#collapse8

下图是基于Android 4.3的CyanogenMod虚拟设备的截图,

enter image description here

它可以被认为是一个完全成熟的Android设备,运行在基于x86或x64的个人电脑上。为了在这个虚拟设备上使用Google PlayStore之类的谷歌服务,它所使用的Android版本的gapps映像必须闪到设备上。一个合适的gapps图像的设备可以从CyanogenMod网站下载:

http://wiki.cyanogenmod.org/w/Google_Apps

Gradle安装是可选的,因为它也是由Android SDK本身提供的,但强烈建议单独安装。它的安装可以按照以下步骤进行:

  • 去Gradle网站:http://www.gradle.org/

  • < p >点击# EYZ0

  • Previous Releases下选择1.10版本并下载gradle all.zip——1.10gradle bin.zip——1.10

  • 将其内容解压到一个文件夹中,例如D:\adt\gradle

  • 定义一个名为GRADLE_HOME的新环境变量,其值为Gradle安装文件夹的路径,例如D:\adt\gradle

  • 添加你的Gradle二进制文件文件夹,例如D:\adt\gradle\bin,到你的%PATH%变量

  • 打开终端窗口并运行gradle -v命令,并验证它已经启动并运行 如果你已经成功地到达了这一点,那么这意味着你已经准备好使用Java 8的功能来创建你的第一个Android应用程序

Demo App

. 将创建一个简单的应用程序来演示上一节中描述的工具的使用。 你可以简单地按照下面给出的步骤来深入了解在Android开发工具中使用lambda表达式
  • 运行Eclipse IDE并通过选择File -> New -> Other -> Android -> Android Application Project创建一个新的Android应用程序
  • 填写如下所示的表格:

enter image description here

  • 只需单击下面表单上的Next按钮,然后单击最后一个表单上的Finish按钮。等待ADT完成加载项目

  • 右键单击项目并选择New -> Folder并将其命名为builders

  • 右键单击gen (Generated Java Files)文件夹并删除它。Gradle将很快为我们生成相同的文件,我们将把它们添加到由默认Ant构建器创建的项目s build path. The gen '文件夹中,该文件夹下的工件将被淘汰

  • builders文件夹下创建以下批处理文件:

    - gradle_build.cmd
    - gradle_post_build.cmd
    - gradle_clean.cmd
    
  • 按如下方式填写这些批处理文件:

gradle_build.cmd:

enter image description here

gradle_post_build.cmd:

enter image description here

gradle_clean.cmd:

enter image description here

  • 取消选择Project -> Build Automatically菜单选项
  • 右键单击项目,选择Properties -> Builders,取消选择ADT提供的所有默认构建器
  • 在同一窗口中单击New按钮,并选择Program,然后单击OK
  • 将出现新的构建器配置窗口。按如下方式填写其选项卡:

新建Builder配置的Main标签

enter image description here

新建Builder配置的Refresh标签

enter image description here

新建Builder配置的Environment标签

enter image description here

新建Builder配置的Build Options标签

enter image description here

  • 创建第二个构建器Gradle_Post_Build,它使用gradle_post_build.cmd作为程序。此构建器的所有其他设置必须与先前创建的构建器完全相同。这个构建器将负责将构建过程创建的工件复制到bin文件夹中。
  • 创建第三个构建器Gradle_Cleaner,它使用gradle_clean.cmd作为程序。最后一个选项卡中只有Run the builder设置必须设置为During a Clean。此构建器的所有其他设置必须与第一个构建器完全相同。顾名思义,这个构建器将负责清理构建过程创建的工件。

HelloLambda项目的新建设者

enter image description here

  • 右键单击项目并选择Export
  • 选择Android -> Generate Gradle Build Files,单击Next
  • 在下一个窗口中选择项目并单击Finish
  • 转到项目的根文件夹,删除文件gradlewgradlew.bat。同时删除gradle文件夹
  • 切换回Eclipse并选择Project -> Clean菜单选项。填写如下所示的表格:

# EYZ0窗口

enter image description here

  • 单击OK并等待清洗过程完成
  • MainActivity类中调用setContentView函数后添加下面给出的Java代码片段:

enter image description here

  • 更改build.gradle文件的开头直到sourceCompatibility部分,如下所示:

enter image description here

  • 右键单击项目并选择Properties -> Java Compiler选项,并将所有遵从级别设置为Java 8。这将使Eclipse识别新的Java 8结构,如lambda表达式。
  • 在通知窗口中单击No
  • 右键单击项目并选择Build project。Eclipse将开始构建项目。

< >强构建过程 enter image description here

  • 右键单击项目并转到Properties -> Java Build Path。将以下文件夹添加到构建路径(如下图所示):

    • # EYZ0
    • # EYZ0

enter image description here

Eclipse现在将能够识别R.javabuildConfig.java文件,它将不会显示任何red dots,这表示与项目资源文件相关的错误。

  • 通过右键单击项目,然后选择Run As -> Run Configurations,为您的Android目标平台创建一个新的Run Configuration。例如,这个演示应用程序看起来如下所示的Genymotion VD:

HelloLambda Application

.

enter image description here

您可以在LogCat窗口中观察到带有简单lambda表达式的代码片段正常工作

enter image description here

来源:# EYZ0

是的,Android现在支持Java 8 (24.1.17)

现在这是可能的

但是你需要让你的设备在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插件。< / p >

enter image description here

我们可以使用Java 8使用:

  1. 在构建< p >。gradle (Project: myProject)添加以下内容

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
    
  2. In build.gradle (Module: myModule) add following

    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的人,更多的信息可以在他们的网站上找到:

https://kotlinlang.org < a href = " https://kotlinlang.org " > < / >

或者观看Jake Wharton的演讲视频

https://www.youtube.com/watch?v=A2LukgT2mKc < a href = " https://www.youtube.com/watch?v=A2LukgT2mKc " > < / >

Android在Android N正式支持Java 8。

功能公告在这里, Java 8语言公告是:

我们很高兴将Java 8语言特性引入Android。使用Android的Jack编译器,你就可以 现在使用许多流行的Java 8语言特性,包括lambdas和 早在Gingerbread的Android版本上就有。新功能 有助于减少样板代码。例如,lambdas可以替换 提供事件监听器时的匿名内部类。一些Java 8 语言特性——比如默认方法和静态方法、流和 功能接口——现在在N及以上也可用。与 Jack,我们期待着更密切地跟踪Java语言

.

.

点击此链接获取最新更新。# EYZ0

旧的答案

Android N预览发布时,Android支持有限的Java 8功能,参见Java 8语言特性

要开始使用这些功能,您需要下载并设置Android Studio 2.1和Android N预览SDK,其中包括 需要杰克工具链和更新的Android插件为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表达式,记得去你的 构建。将“compileSdkVersion”和“targetSdkVersion”设置为

更新2

现在Android studio 3.0稳定版支持Java 8库和Java 8语言特性(没有Jack编译器)。

原生Java 8登陆android!终于!

从每个模块中删除Retrolambda插件和Retrolambda块 构建。gradle文件:< / p >

要禁用Jack并切换到默认工具链,只需删除 模块构建中的jackOptions块。gradle文件< / p >

要开始使用受支持的Java 8语言特性,请将Android插件更新到3.0.0(或更高版本)

从Android Studio 3.0开始,Java 8语言功能现在原生支持Android:

  • 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(类)
  • java.lang.reflect.Method.isDefault ()

将这些行添加到应用程序模块的构建中。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循环中不再有列表过滤器。Horeeey。

我在Stack Overflow上写了类似的回答类似的问题,但这是答案的一部分。

Android Studio 2.1:

新版Android Studio(2.1)支持Java 8特性。以下是Android开发者博客文章的一段摘录:

... Android Studio 2.1版本包括对新的杰克编译器Java 8的支持。

...

在使用N Developer Preview进行开发时,要使用Java 8语言特性,您需要使用Jack编译器。新建项目向导[文件→新建→项目]为目标N的项目生成正确的配置。


在Android Studio 2.1之前:

Android还不支持Java 1.8(它只支持1.7),所以你不能使用Java 8的特性,比如lambdas。

# EYZ0;州:

如果你想在Android中使用lambdas (Java 8的主要特性之一),你可以使用gradle-retrolamba

如果你想知道更多关于使用gradle-retrolambda这个答案给出了很多细节

添加这个配置版本。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.function
  • java.util.stream

为了使用新的Java 8语言特性,还需要使用杰克工具链。这个新的Android工具链将Java语言源代码编译成Android可读的DEX字节码,有自己的.jack库格式,并将大多数工具链特性作为单个工具的一部分提供:重新打包、收缩、混淆和multidex。

以下是用于构建Android DEX文件的两个工具链的比较:

Legacy javac toolchain:
javac (.java → .class) → dx (.class → .dex)
New Jack toolchain:
Jack (.java → .jack → .dex)

谷歌刚刚宣布Java 8将被Android原生支持,Jack工具链将弃用:

我们已经决定将对Java 8语言特性的支持直接添加到当前的javac和dx工具集中,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该可以继续工作。接下来,Java 8语言特性将被Android构建系统原生支持。我们的目标是在未来几周内将其作为Android Studio的一部分发布,我们希望尽早与大家分享这一决定。

更多信息 # EYZ0 < / p >

是的。我们将很快使用Java 8 !

我们已经决定将对Java 8语言特性的支持直接添加到当前的javac和dx工具集中,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该可以继续工作。接下来,Java 8语言特性将被Android构建系统原生支持。我们的目标是在未来几周内将其作为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,通过使用称为desugaring的技术,没有要求应用程序的最低API级别:
# EYZ0 < / p >

本版本支持以下api集:

  • 顺序流(java.util.stream)
  • java.time的子集
  • # EYZ0
  • java.util.{Map,Collection,Comparator}的最新添加
  • 可选(java.util.Optionaljava.util.OptionalIntjava.util.OptionalDouble)和一些其他有用的新类 以上api李< / >
  • 一些添加到java.util.concurrent.atomic(新方法在AtomicIntegerAtomicLongAtomicReference)
  • ConcurrentHashMap (Android 5.0 bug修复)
为了支持这些语言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:

  • # EYZ0
  • # EYZ0
  • # EYZ0
  • # EYZ0
  • # EYZ0
  • # EYZ0

除此之外,try-with-resources支持扩展到所有Android API级别。

更多的Java 8特性将在未来被添加。

开始使用支持的Java 8语言功能,更新Android 插件到3.0.0-alpha1(或更高版本),并将以下内容添加到您的 模块的构建。gradle文件:< / p >

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

更多详情请访问:
# EYZ0 < / p >

我在3年前问过这个问题,很明显,这些年来答案已经发生了变化。正如上面许多人已经回答过的那样,在不久之前,答案变成了是的。我从来没有更新过被接受的答案,因为它是当时的正确答案。(我不确定堆栈溢出策略是什么)

我只是想给那些还在搜索这个话题的人补充一个答案。截至2017年5月17日,谷歌还宣布芬兰湾的科特林也是一种用于Android开发的官方语言。

我还没有找到官方的新闻稿,但我确实看了一些谷歌I/O 视频的公告。这里是Kotlin团队关于公告的博客帖子的链接。

添加以下内容修复了我的问题(Android studio 2.3.2):

构建。gradle(项目)

buildscript {
repositories {
...
jcenter()
}
dependencies {
...
classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
...
}
}

构建。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

    • 或<强> # EYZ0 < / >强

    • 李< / ul > < / >
    • 如图所示,在项目结构对话框中将Source CompatibilityTarget Compatibility更新为1.8(单击File > Project Structure)。

    image

    或者你可以使用gradle

     android {
    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
    

    同步项目。就是这样!

    Java 1.8支持可以为Android Studio 3.0.0或更高。进一步阅读请参见文档

添加这一行到模块LVL构建等级

< p > <代码> compileOptions { sourceCompatibility JavaVersion。VERSION_1_8 targetCompatibility JavaVersion。VERSION_1_8 代码}< / > < / p >

上述所有解决方案似乎都不能在2019和最新的Android Studio 3.4+中工作。

我想出了一个完美的和最新的解决方案,迁移或升级你的Android项目Java 8

<强>解决方案: 点击文件 -> 项目结构 -> 模块 -> 属性标签。

源的兼容性目标的兼容性更改为1.8 (java8)

enter image description here

更新2019/10/28

Android Studio 4.0解决了问题

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'
}

只需将其添加到您的构建中。gradle文件。

Android Gradle插件3.0.0及以后版本支持所有Java 7语言特性和Java 8语言特性的子集,这些特性因平台版本而异。当使用Android Gradle插件4.0.0或更高版本构建应用程序时,您可以使用许多Java 8语言API,而无需为应用程序设置最低API级别。

本页描述了您可以使用的Java 8语言特性,如何正确配置您的项目以使用这些特性,以及您可能遇到的任何已知问题。

因为这篇文章将帮助你。我把链接放在下面 # EYZ0 < / p >

容易记住的答案

在android studio中,单击项目结构图标,然后进入模块/应用程序,然后将源兼容性和目标兼容性更改为1.8,然后按Ok。

.