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

Is it possible to use Java 8 for Android development?

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

在我下载/设置Java 8之前,有人可以在任何"官方"文档中指出我说Java 8是否支持Android开发。


更新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,只有新的语法糖。

如果你想使用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功能代替官方支持,这是一个黑客攻击。


java 8

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

检查支持java 8的哪些功能

使用Java 8语言功能

We've decided to add support for Java 8 language features directly into the current javac and dx set of tools, and deprecate the Jack toolchain. With this new direction, existing tools and plugins dependent on the Java class file format should continue to work. Moving forward, Java 8 language features will be natively supported by the Android build system. We're aiming to launch this as part of Android Studio in the coming weeks, and we wanted to share this decision early with you.

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

Eclipse用户:

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

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

Eclipse Preferences -> Java - >编译器

Java 7 or higher is required if you are targeting Android 5.0 and
higher.

安装多个JDK并尝试。


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

下面是我最近为Android开发运行lambda表达式所遵循的完整指南。最后提到了本指南的原始来源。

在本指南中,介绍了一些Java 8功能的方法
将展示Android开发工具,专门针对
Eclipse IDE。但是,本指南中将描述的步骤也可能适用于Google的新起义开发
环境,Android Studio。它基于社区版
JetBrains最受欢迎的IntelliJ Idea IDE
2014年7月初由Google升级为"测试版"
在编写本指南之前。 Eclipse仍然是突出的
开发环境,至少在一段时间内,并考虑到
事实上,大多数Android项目都是使用Eclipse开发的
将lambda表达式等新Java 8特性引入的方法
ADT似乎对开发人员非常有用。

Android Development基于一个名为的自定义Java实现
Apache Harmony项目于2011年被终止。最多
Android Development中常用的Java语法是Java 6(v1.6)和
KitKat版本也部分支持Java 7(v1.7)
(Android 4.4。+)。因此,Java 8的特性就像lambda表达式
不能直接在Android App开发中使用
在开发工具中应用一些调整。幸运的是,这些
构造基本上是一些'语法糖'增强剂
给开发人员带来'匿名课'之类的缺点
它们可以被翻译成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插件
允许基于Gradle的构建在Java或Android中实现
项目。但是,开发人员只提到要集成它
插件进入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。它可能通过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使您可以使用由Oracle VirtualBox执行的CyanogenMod图像来准备Android VD。它的单用户许可是免费的,可以从http://www.genymotion.com下载。只需要登录,它也可以集成到Eclipse中。细节可以在以下位置找到:

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

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

    enter image description here

    它可能被认为是在基于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/

  • 单击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命令并验证它是否已启动并正在运行
    如果您已成功达到这一点,那么这意味着您已准备好使用Java 8功能创建您的第一个Android应用程序。
  • 演示应用程序

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

  • 运行Eclipse IDE并选择File -> New -> Other -> Android -> Android Application Project创建一个新的Android App
  • 填写如下所示的表格:
  • 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
  • 将出现新的构建器配置窗口。填写选项卡如下:
  • Main新构建器配置的选项卡

    enter image description here

    Refresh新构建器配置的选项卡

    enter image description here

    Environment新构建器配置的选项卡

    enter image description here

    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菜单选项。填写如下所示的表格:
  • Clean Project窗口

    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。将以下文件夹添加到构建路径(也在下图中显示):

  • build\source\buildConfig\debug
  • build\source
    \debug
  • enter image description here

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

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

    enter image description here

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

    enter image description here

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

    好。


    请点击此链接获取最新信息。使用Java 8语言功能

    老答案

    截至Android N预览版Android支持Java 8的有限功能,请参阅Java 8语言功能

    To start using these features, you need to download and set up Android
    Studio 2.1 and the Android N Preview SDK, which includes the
    required Jack toolchain and updated Android Plugin for Gradle. If you
    haven't yet installed the Android N Preview SDK, see Set Up to Develop
    for Android N.

    支持的Java 8语言功能和API

    Android does not currently support all Java 8 language features.
    However, the following features are now available when developing apps
    targeting the Android N Preview:

    默认和静态接口方法

    Lambda表达式(也可在API级别23及更低版本上使用)

    可重复的注释

    方法参考(也可在API级别23及更低版本上获得)

    Android支持一些额外的Java 8功能,您可以从Java 8语言功能中查看完整的详细信息

    更新

    Note: The Android N bases its implementation of lambda expressions on
    anonymous classes. This approach allows them to be backwards
    compatible and executable on earlier versions of Android. To test
    lambda expressions on earlier versions, remember to go to your
    build.gradle file, and set compileSdkVersion and targetSdkVersion to
    23 or lower.

    更新2

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


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

    现在有可能

    但是你需要在java 1.8上运行你的设备rom并启用"jackOptions"来运行它。
    Jack是运行Java 8的新Android编译器的名称

    https://developer.android.com/guide/platform/j8-jack.html

    将这些行添加到build_gradle

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        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插件。

    enter image description here


    Android使用从Java 6分支出来的Java。

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


    Android OFFICIALLY从Android N开始支持Java 8。

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

    Improved Java 8 language support - We’re excited to bring Java 8 language features to Android. With Android's Jack compiler, you can
    now use many popular Java 8 language features, including lambdas and
    more, on Android versions as far back as Gingerbread. The new features
    help reduce boilerplate code. For example, lambdas can replace
    anonymous inner classes when providing event listeners. Some Java 8
    language features --like default and static methods, streams, and
    functional interfaces -- are also now available on N and above. With
    Jack, we’re looking forward to tracking the Java language more closely
    while maintaining backward compatibility.


    原生Java 8到达android!最后!

    remove the Retrolambda plugin and retrolambda block from each module's
    build.gradle file:

    To disable Jack and switch to the default toolchain, simply remove the
    jackOptions block from your module’s build.gradle file

    要开始使用受支持的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(类)
    • java.lang.reflect.Method.isDefault()

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

    1
    2
    3
    4
    5
     android {
       compileOptions {
           sourceCompatibility JavaVersion.VERSION_1_8
           targetCompatibility JavaVersion.VERSION_1_8
       }

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

    1
    android.enableDesugar=false

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


    我们可以使用Java 8:

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

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

    1
    2
    3
    4
    5
    6
    apply plugin: 'me.tatarka.retrolambda'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

  • 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功能。

    To start using supported Java 8 language features, update the Android
    plugin to 3.0.0-alpha1 (or higher) and add the following to your
    module’s build.gradle file:

    1
    2
    3
    4
    5
    6
    7
    android {
      ...
      compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }

    欲了解更多详情,请访
    https://developer.android.com/studio/write/java8-support.html


    简单的方法

    您可以为android项目启用java 1.8支持。

    • 打开项目结构

      • 通过按Ctrl + Shift + Alt + S

      • 或者File > Project Structure

    • 如图所示,在Project Structure对话框中将Source Compatibility and Target Compatibility更新为1.8(单击File> Project Structure)。

    image

    或者你可以使用gradle

    1
    2
    3
    4
    5
     android {
       compileOptions {
           sourceCompatibility JavaVersion.VERSION_1_8
           targetCompatibility JavaVersion.VERSION_1_8
       }

    同步项目。就是这样!

    注意:可以为Android Studio 3.0.0或更高版本启用Java 1.8支持。请参阅文档以进一步阅读


    差不多两年前,当我问这个问题时,答案确实是"正式"否定,但正如ekcr1的回答所指出的,如果你使用retrolamba,你可以得到一个最受期待的功能(lambdas)。当时我还在使用eclipse,因为Android Studio处于"预览"模式,所以我从未尝试过这条道路。

    今天,我认为"官方"答案仍然没有,虽然retrolamba似乎仍然是一个很好的方式,但对于那些愿意采取某种"非官方"路线的人来说,还有另一种选择,即Kotlin。

    今天Kotlin达到了1.0.0。对于那些不熟悉Kotlin的人,可以在他们的网站上找到更多信息:

    https://kotlinlang.org

    或观看杰克沃顿给出的这个演讲视频


    添加此配置build.gradle和sync gradle:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    android {
        ...
        defaultConfig {
            ...
            jackOptions {
                enabled true
            }
        }

        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
            // or
            //sourceCompatibility 1.8
            //targetCompatibility 1.8
        }
    }


    最新消息:

    谷歌宣布,通过Android N和Android Studio 2.1+,平台将支持Java 8.同时发布了稳定版的Studio 2.1。

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


    Google刚宣布Java 8将由Android本机支持,并且Jack工具链将弃用:

    We've decided to add support for Java 8 language features directly into the current javac and dx set of tools, and deprecate the Jack toolchain. With this new direction, existing tools and plugins dependent on the Java class file format should continue to work. Moving forward, Java 8 language features will be natively supported by the Android build system. We're aiming to launch this as part of Android Studio in the coming weeks, and we wanted to share this decision early with you.

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


    是。我们很快就会使用Java 8!

    We've decided to add support for Java 8 language features directly into the current javac and dx set of tools, and deprecate the Jack toolchain. With this new direction, existing tools and plugins dependent on the Java class file format should continue to work. Moving forward, Java 8 language features will be natively supported by the Android build system. We're aiming to launch this as part of Android Studio in the coming weeks, and we wanted to share this decision early with you.

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


    将此行添加到模块lvl build gradel中

    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }


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

    目前,Android和Android Studio正在支持Java 8功能的一个子集。根据其网站上的Android文档,Google表示:

    Support for Java 8 language features requires a new compiler called Jack. Jack is supported only on Android Studio 2.1 and higher. So if you want to use Java 8 language features, you need to use Android Studio 2.1 to build your app.

    If you already have Android Studio installed, make sure you update to the latest version by clicking Help > Check for Update (on Mac, Android Studio > Check for Updates). If you don't already have the IDE installed on your workstation, download Android Studio here.

    Supported Java 8 Language Features and APIs

    Android does not support all Java 8 language features. However, the following features are available when developing apps targeting Android 7.0 (API level 24):

    • Default and static interface methods Lambda expressions (also available on API level 23 and lower)
    • Repeatable annotations
    • Method References (also available on API level 23 and lower)
    • Type Annotations (also available on API level 23 and lower)

    此外,还提供以下Java 8语言API:

    Reflection and language-related APIs:

    • java.lang.FunctionalInterface
    • java.lang.annotation.Repeatable
    • java.lang.reflect.Method.isDefault() and Reflection APIs associated with repeatable annotations, such as
      AnnotatedElement.getAnnotationsByType(Class)

    Utility APIs:

    • java.util.function
    • java.util.stream

    In order to use the new Java 8 language features, you need to also use the Jack toolchain. This new Android toolchain compiles Java language sources into Android-readable DEX bytecode, has its own .jack library format, and provides most toolchain features as part of a single tool: repackaging, shrinking, obfuscation and multidex.

    Here is a comparison of the two toolchains used to build Android DEX files:

    1
    2
    3
    4
    Legacy javac toolchain:
        javac (.java → .class) → dx (.class → .dex)
        New Jack toolchain:
        Jack (.java → .jack → .dex)

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

    我只是想为仍在搜索此主题的人添加另一个答案。截至2017年5月17日,谷歌还宣布Kotlin也是Android开发的官方语言。

    我还没有找到正式的新闻稿,但我确实观看了一些宣布它的谷歌I / O视频。以下是Kotlin团队在公告中发布博客文章的链接。


    添加以下内容为我解决了问题(Android studio 2.3.2):

    build.gradle(项目)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    buildscript {
    repositories {
        ...
        jcenter()
    }
    dependencies {
        ...
        classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
        ...
       }
    }

    build.gradle(模块:app)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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的一个子集。只需从下面的窗口调整源和目标兼容性:

    文件 - >项目结构

    Adjustment Window

    更多信息见下面的链接。

    https://developer.android.com/studio/write/java8-support.html


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

    Android Studio 2.1:

    新版Android Studio(2.1)支持Java 8功能。以下是Android Developers blogspot帖子的摘录:

    ... Android Studio 2.1 release includes support for the new Jack compiler and support for Java 8.

    ...

    To use Java 8 language features when developing with the N Developer Preview, you need to use the Jack compiler. The New Project Wizard [File→ New→ Project] generates the correct configurations for projects targeting the N.

    在Android Studio 2.1之前:

    Android还不支持Java 1.8(它最多只支持1.7),所以你不能使用像lambdas这样的Java 8功能。

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

    If you want to use lambdas, one of the major features of Java 8 in Android, you can use gradle-retrolamba

    如果您想了解有关使用gradle-retrolambda的更多信息,那么这个答案会提供很多详细信息。


    所有上述解决方案似乎都没有在2019年使用最新的Android Studio 3.4+。

    我找到了一个完美的最新解决方案,可以将您的Android项目迁移或升级到Java 8。

    解:
    单击文件 - >项目结构 - >模块 - >属性选项卡。

    将源兼容性和目标兼容性更改为1.8(Java 8)

    enter image description here