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

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

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

19 Solutions collect form web for “是否有可能使用Java 8进行Android开发?”

java 8

Android支持所有Java 7语言功能以及随平台版本而变化的Java 8语言功能的子集。

检查哪些功能的Java 8支持

使用Java 8语言功能

我们决定直接在当前的javac和dx工具集中添加对Java 8语言特性的支持,并且弃用Jack工具链。 有了这个新的方向,依赖于Java类文件格式的现有工具和插件应该继续工作。 展望未来,Java 8语言功能将由Android构建系统本地支持。 我们打算在未来几周内将其作为Android Studio的一部分,我们希望尽早与您分享这一决定。

Android的Java 8语言功能支持的未来

Eclipse用户:

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

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

Eclipse首选项 - > Java  - >编译器

如果您的目标是Android 5.0及更高版本,则需要Java 7或更高版本。

安装多个JDK并尝试。

UPDATE 2017/11/04 – 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 。 这是一个Gradle构建依赖项,它集成了retrolambda,一个将Java 8字节码转换回Java 6/7的工具。 基本上,如果您在Android Studio中设置编译器来编译Java 8字节码,从而允许lambdas,它会将其转换回Java 6/7字节码,然后转换为dalvik字节码。 如果你想尝试一下Android中的一些JDK 8功能来代替官方的支持,这是一个黑客。

您确实可以使用gradle-retrolamba retrolamba gradle build dependency来使用Java 8 for Android Development。

下面是我最近为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 Development中最常用的Java语法是Java 6(v1.6)和Java 7(v1.7)。 KitKat版本(Android 4.4。+)。 因此,像lambda表达式这样的Java 8特性不能直接在Android应用程序开发中使用,而无需对开发工具进行一些调整。 幸运的是,这些构造基本上是一些“语法糖”的增强,给开发人员诸如“匿名类”之类的缺点,并且可以翻译成Java 6或Java 7类。

最近将Java 8源代码翻译成较低Java版本的方法称为RetroLambda 。 这个库使得开发人员可以在Java 7上使用lambda表达式运行Java 8代码,甚至更低。 遗憾的是,除了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 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%变量中
  • 使用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
  • 将您的Andoid SDK Platform ToolsAndoid 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 。 可以通过Help -> Install New Software在Eclipse中Help -> Install New Software进行Help -> Install New Software 。 输入http://download.eclipse.org/eclipse/updates/4.3-P-builds/到Work with领域并继续安装它。

  • Nodeclipse / Enide Gradle:主要用于突出显示Groovy语言关键字。 Groovy被用作Gradle构建脚本的DSL。 这个插件可以通过Eclipse Marketplace安装。 但是,ADT-22.6.2中的Eclipse Marketplace Client不能与Eclipse Marketplace Client一起使用。 因此,您首先需要在Eclipse Marketplace Client通过Install New Software工具来安装Eclipse Marketplace Client 。 输入http //:download.eclipse.org/mpc/kepler/进入“ Work with字段并继续安装。 安装Eclipse Marketplace Client ,您可以在Eclipse Marketplace Client搜索Nodeclipse/Enide Gradle并安装它。

  • Genymotion虚拟设备:它是ADT随附的默认Android Virtual Device完美替代品。 AVD烦人的烦人,并无故停止崩溃。 Genymotion使您可以使用由Oracle VirtualBox执行的CyanogenMod映像来准备Android VD。 其单一用户许可证是免费的,可以从http://www.genymotion.com下载。 只需要登录,也可以集成到Eclipse中。 详情可以在下面找到:

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

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

在这里输入图像描述

它可能被认为是在基于x86或x64的个人计算机上运行的完全安全的Android设备。 为了在此虚拟设备上使用Google Google PlayStore类的Google服务,必须将其使用的Android版本的gapps图像gapps到设备上。 可以从CyanogenMod网站下载适用于该设备的gapps映像:

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

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

  • 转到Gradle网站: http : //www.gradle.org/

  • 点击Downloads

  • 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命令并验证它是否已启动并运行如果您已经成功完成了这gradle -v ,则表示您已准备好使用Java 8功能创建您的第一个Android应用程序。

演示程序

将创建一个简单的应用程序来演示上一节中介绍的工具的用法。 您可以简单地按照下面给出的步骤来了解在Android Developer Tools中使用lambda表达式:

  • 运行Eclipse IDE并通过选择File -> New -> Other -> Android -> Android Application Project来创建一个新的Android应用File -> New -> Other -> Android -> Android Application Project
  • 填写如下所示的表格:

在这里输入图像描述

  • 只需点击下列表格上的Next按钮,然后点击最后一个表格上的Finish按钮。 等到ADT完成加载项目
  • 右键单击该项目并选择New -> Folder并将其命名为builders
  • 右键单击gen (Generated Java Files)文件夹并将其删除。 Gradle将尽快为我们生成相同的文件,并将它们添加到项目s build path. The 由默认Ant构建器创建s build path. The gen`文件夹不再需要,该文件夹下的工件将被废弃
  • builders文件夹下创建以下批处理文件:

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

gradle_build.cmd:

在这里输入图像描述

gradle_post_build.cmd:

在这里输入图像描述

gradle_clean.cmd:

在这里输入图像描述

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

新的Builder配置的Main选项卡

在这里输入图像描述

Refresh生成器配置的选项卡

在这里输入图像描述

新建Builder配置的Environment选项卡

在这里输入图像描述

Build Options Builder配置的Build Options

在这里输入图像描述

  • 创建名为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
  • 转到您的项目的根文件夹,并删除gradlewgradlew.bat文件。 同时删除gradle文件夹
  • 切换回Eclipse并选择Project -> Clean菜单选项。 填写如下所示的表格:

Clean Project窗口

在这里输入图像描述

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

在这里输入图像描述

  • build.gradle文件的开始更改为sourceCompatibility节,如下所示:

在这里输入图像描述

  • 右键单击项目并选择“ Properties -> Java Compiler选项,并将所有合规性级别设置为Java 8.这将使Eclipse识别新的Java 8结构,如lambda表达式。
  • 在通知窗口中单击No
  • 用鼠标右键单击该项目,然后选择Build project 。 Eclipse将开始构建项目。

构建过程 在这里输入图像描述

  • 右键单击该项目,然后转到“ Properties -> Java Build Path 。 将以下文件夹添加到构建路径(也显示在下图中):

    • build\source\buildConfig\debug
    • build\source\r\debug

在这里输入图像描述

Eclipse现在可以识别R.javabuildConfig.java文件,并且不会显示任何表示与项目资源文件有关的错误的red dots

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

HelloLambda应用程序

在这里输入图像描述

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

在这里输入图像描述

来源: 在Android开发人员工具中使用Java 8 Lambda表达式

按照此链接获取新的更新。 使用Java 8语言功能

老答案

Android N预览版本开始,Android支持Java 8的 有限特性参见Java 8语言特性

要开始使用这些功能,您需要下载并设置Android Studio 2.1和Android N Preview SDK,其中包括所需的Jack工具链和更新的Gradle插件。 如果您尚未安装Android N Preview SDK,请参阅设置为适用于Android N的开发 。

支持Java 8语言功能和API

Android目前不支持所有的Java 8语言功能。 但是,开发面向Android N Preview的应用程序时,现在可以使用以下功能:

默认和静态接口方法

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编译器)。

Android使用分支出Java 6的Java。

从Android SDK版本19开始,可以通过执行此操作来使用Java 7功能。 没有完全支持Java 8(还)。

Android官方支持Android 8以来的Java 8

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

改进的Java 8语言支持 – 我们很高兴将Java 8语言功能带入Android。 使用Android的Jack编译器,现在可以在Android版本上使用许多流行的Java 8语言功能,包括lambdas等。 新功能有助于减少样板代码。 例如,lambdas可以在提供事件监听器时替换匿名内部类。 某些Java 8语言功能(如默认和静态方法,流和功能接口)现在也可在N及更高版本上使用。 与Jack一起,我们期待更紧密地跟踪Java语言,同时保持向后兼容性。

是的,Android支持Java 8 Now(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插件。

在这里输入图像描述

我们可以使用Java 8使用:

  1. 在build.gradle(Project:myProject)中添加以下内容

     classpath 'me.tatarka:gradle-retrolambda:xxx' //xxx is recent version 
  2. 在build.gradle(Module:myModule)中添加以下内容

     apply plugin: 'me.tatarka.retrolambda' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 

本地Java 8到达android! 最后!

从每个模块的build.gradle文件中删除Retrolambda插件和retrolambda块:

要禁用Jack并切换到默认工具链,只需从模块的build.gradle文件中移除jackOptions块即可

要开始使用受支持的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()

将这些行添加到应用程序模块的build.gradle中以通知项目的语言级别:

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

通过将以下内容添加到您的gradle.properties文件来禁用对Java 8语言功能的支持:

 android.enableDesugar=false 

你完成了! 你现在可以使用原生的java8!

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年前问这个问题的时候,答案确实是“正式”的,但是正如ekcr1的回答所指出的那样,如果你使用retrolamba,你可以得到一个最值得期待的功能(lambda)。 当时我还在使用eclipse,因为Android Studio处于“预览”模式,所以我从来没有去追求过这个道路。

今天,我认为“官方”的答案仍然是否定的,虽然retrolamba似乎仍然是一个好的出路,但愿意走下一条“非官方”路线的人们也可以选择Kotlin。

今天Kotlin达到了1.0.0。 对于那些不熟悉Kotlin的人,可以在这里找到更多信息:

https://kotlinlang.org

或者看这个由杰克·沃顿(Jake Wharton)发表的演讲的utube视频

https://www.youtube.com/watch?v=A2LukgT2mKc

最新消息:

谷歌宣布,在Android N和Android Studio 2.1+平台上将支持Java 8.也发布了studio 2.1的稳定版本。

最后我们可以使用lambda表达式。 for循环中没有更多列表过滤器。 Horeeey。

添加这个配置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 } } 

谷歌刚刚宣布,Java 8将本机支持Android和杰克工具链将弃用:

我们决定直接在当前的javac和dx工具集中添加对Java 8语言特性的支持,并且弃用Jack工具链。 有了这个新的方向,依赖于Java类文件格式的现有工具和插件应该继续工作。 展望未来,Java 8语言功能将由Android构建系统本地支持。 我们打算在未来几周内将其作为Android Studio的一部分,我们希望尽早与您分享这一决定。

更多信息: https : //android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

是。 我们将尽快使用Java 8!

我们决定直接在当前的javac和dx工具集中添加对Java 8语言特性的支持,并且弃用Jack工具链。 有了这个新的方向,依赖于Java类文件格式的现有工具和插件应该继续工作。 展望未来,Java 8语言功能将由Android构建系统本地支持。 我们打算在未来几周内将其作为Android Studio的一部分,我们希望尽早与您分享这一决定。

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

我写了一个类似的答案堆栈溢出类似的问题 ,但这是答案的一部分。

Android Studio 2.1:

Android Studio(2.1)的新版本支持Java 8功能。 以下是Android开发者blogspot文章的摘录:

… Android Studio 2.1版本包括对新的Jack编译器的支持和对Java 8的支持。

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


在Android Studio 2.1之前:

Android不支持Java 1.8(它只支持1.7),所以你不能使用Java 8的功能,如lambda。

这个答案给出了Android Studio兼容性的更多细节 ; 它指出:

如果你想使用lambda表达式,这是Android 8中Java 8的主要特性之一,你可以使用gradle-retrolamba

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

我想我会发布一个更新的答案,为那些正在寻找一些更新的东西。

目前Android和Android Studio支持Java 8功能的一个子集。 根据他们网站上的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()和Reflection API,如AnnotatedElement.getAnnotationsByType(Class)

实用程序API:

  • java.util.function
  • 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) 

三年前我问过这个问题,显然答案多年来一直在改变。 正如上面已经回答的那样,到了某个时候,答案变成了“ 是” 。 我从来没有更新接受的答案,因为这是当时的正确答案。 (我不知道堆栈溢出策略是什么)

我只是想为那些仍然在寻找这个话题的人添加另一个答案。 截至2017年5月17日Google还宣布Kotlin也是Android开发的官方语言。

我还没有找到正式的新闻稿,但是我看过一些Google I / O 视频 。 这是Kotlin团队发布的博客文章的链接。

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

build.gradle(Project)

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

build.gradle(模块:应用程序)

 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 ... } 
  • Java将列表转换为集合的映射
  • Java 8中的map和flatMap方法有什么区别?
  • 什么Java 8 Stream.collect等价物在标准Kotlin库中可用?
  • 如何在Kotlin的Java 8 Stream上调用collect(Collectors.toList())?
  • 如何使用Java 7或更早版本实现Java 8 Stream API?
  • 与Java SAM没有2.12 M2标志的Scala互操作
  • 使用Kotlin中的Java Stream API获取列表中的元素
  • 胶囊例外
  • Kotlin:Java 8的哪些功能尚未支持?
  • 用lambda参数记录kotlin
  • 是否有任何相当于Java 8 Stream限制function的Kotlin函数?
  • Kotlin language will be the best programming language for Android.