在网上搜索,尚不清楚是否支持Android 8开发的Java8。

在下载/设置Java 8之前,可以有人指向任何说Java 8的“官方”文档吗? Android开发是否支持。

评论

我不知道官方声明,但是我已经将Java 8(编辑:JDK 8)与Android SDK配合使用了。 Windows 8.1 64位在这里。

这篇文章进行了讨论。Android的Java版本与Java SE版本如何相关?

@HoangHuynh,您可以使用JDK 6或更高版本进行Android开发。但是,该编译支持Java版本6(对于KitKat,则支持7)。我认为OP的意思也适用于Java版本(不是JDK)

Android N正式支持Java8。android-developers.blogspot.com/2016/03/…

也许很快:developer.android.com/preview/j8-jack.html

#1 楼

java 8

Android支持所有Java 7语言功能以及Java 8语言功能的子集,具体取决于平台版本。

要检查支持Java 8的哪些功能

使用Java 8语言功能


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


Android对Java 8语言功能的支持


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

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




如果要面向Android 5.0和更高版本,则需要Java 7或更高版本。
/>

安装多个JDK并尝试。

评论


Java 8是否更改了字节码的工作方式?如果没有,从理论上讲,只要可以编译,就可以使用任何版本的Java。

– Ben Leggiero
15年3月12日在14:13

正确的问题是:如果您不使用Java 7中的新功能来构建android应用,而在Java 7中不存在该怎么办?为了安全起见,请遵循官方指示。

–。萨默尔·T
15年3月12日在20:12

@ BenC.R.Leggiero Java 8中没有新的字节码,但指令的含义和结构已更改stackoverflow.com/questions/28228450/…stackoverflow.com/questions/16143684/…

–phuclv
15年3月14日在19:13

请不要在答案中发布“更新N”。重写它以获取最新信息。否则,SO将在几年内与其取代的论坛一样难以获得信息。

–亚历山大·杜宾斯基(Aleksandr Dubinsky)
16 Mar 7 '16 at 21:44

答案需要更新。从Android Studio 3.0和Gradle Plugin 3.0开始将支持Java 8。

–ЮрійМазуревич
17-10-21在20:27

#2 楼

2017年11月4日更新-Android Studio 3.0现在具有对Java 8的本机支持。现在不再需要gradle-retrolambda。请参阅https://developer.android.com/studio/write/java8-support.html

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


Android不支持Java8。它仅支持Java 7(如果有kitkat),并且仍然不具有invokedynamic,只有新语法糖。

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

评论


要使其正常工作需要一些努力,但是一旦我按照正确的说明进行操作,它就会很好地工作。给Eclipse用户的提示:Eclipse在此方面不能很好地工作,我建议迁移到Android Studio(我会想念Eclipse,但这是现在的方式!)

–西蒙·福斯伯格
2014年4月28日在10:49

Nitpick:Android不支持Java 7的多捕获子句。

–csvan
2014年6月5日9:10

支持多捕获,仅Android不支持的JDK7功能是try-with-resources

–马赛·哈雷(MatthieuHarlé)
2014年7月23日在10:31

Java 7适用于所有版本的Android。一个例外:try-with-resources仅自Kitkat开始有效。

–德米特里·扎伊采夫(Dmitry Zaytsev)
2014年8月21日在10:20

@SimonAndréForsberg(警告:无耻的插件!)-关于不支持Java 8流API的问题,您可以使用sourceforge.net/projects/streamsupport上的我的库-它明确说明了对Android的支持。

– Stefan Zobel
2015年5月27日19:40

#3 楼

您确实可以使用gradle-retrolamba gradle构建依赖项来将Java 8用于Android开发。

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


在本指南中,将演示一种将Java 8功能引入Android开发工具的方法,专门针对在
Eclipse IDE中。但是,本指南中将介绍的步骤也可能会适应Google新起义的开发环境Android Studio。它基于JetBrains流行的IntelliJ Idea IDE的社区版本,并且最近已于2014年7月由Google
升级到其“测试版”版本,在本指南发布之前略有
。书面。至少在一段时间内,Eclipse仍将是主要的开发环境,并考虑到大多数Android项目都是使用Eclipse开发的事实,而Eclipse是一种带来新Java 8功能的方法,例如将Lambda表达式转换为ADT似乎对开发人员非常有用。

Android开发基于名为
Apache Harmony Project的自定义Java实现,该实现于2011年终止。
Android开发中最常用的Java语法是Java 6(v1.6),而KitKat版本(br />)(Android 4.4。+)也部分支持Java 7(v1.7)。因此,如果不对开发工具进行一些调整,就无法在lambda表达式之类的Java 8功能直接在Android App开发中使用。幸运的是,这些
构造基本上是一些“语法糖”增强功能,
给开发人员带来了诸如“匿名类”之类的缺点,并且可以将其转换为Java 6或Java 7类。 br />
一种将Java 8源代码转换为较低Java的最新方法
版本称为RetroLambda。该库使开发人员可以在Java 7或更低版​​本的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 8JDK 7必须在开发机器上共存。要安装它们,必须遵循以下给出的步骤:


转到JDK 8早期访问预览页面http://jdk8.java.net

下载并安装JDK 8u20。无需安装JRE 8,可以跳过JRE8。
转到JDK 7最新的稳定发行版页面http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

下载并安装JDK 7u65。再次不需要安装JRE 7,可以跳过该操作
将JDK 8 home文件夹和JDK 8 bin文件夹添加到您的%PATH%变量中
使用JDK 8 home的路径值创建一个新的环境变量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

定义一个名为ANDROID_HOME的新环境变量,其值为ADT安装文件夹的路径值,例如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中的Eclipse Marketplace Client工具安装Install New Software。在Work with字段中输入http //:download.eclipse.org/mpc/kepler/并继续安装。安装Eclipse Marketplace Client之后,您可以在Nodeclipse/Enide Gradle中搜索Eclipse Marketplace Client并进行安装。
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 PlayStore之类的Google服务,必须将其使用的Android版本的gapps映像刷新到设备上。可以从CyanogenMod网站下载适用于该设备的正确的gapps图像:

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

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


转到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 Binaries文件夹,例如将D:\adt\gradle\bin移至您的%PATH%变量
打开终端窗口并运行gradle -v命令并验证其是否已启动并运行
如果成功完成此操作,则意味着您已准备好创建自己的第一个使用Java 8功能的Android App。
Demo App

将创建一个简单的应用程序,以演示上一节中介绍的工具的用法。
您只需按照以下步骤操作,即可洞悉在Android Developer Tools中使用lambda表达式:


运行Eclipse IDE并通过选择File -> New -> Other -> Android -> Android Application Project创建一个新的Android应用

填写如下所示的表单:




只需单击以下表单上的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:



gradle_post_build.cmd:



gradle_clean.cmd:




取消选择Project -> Build Automatically菜单选项
在项目上单击鼠标右键,然后选择Properties -> Builders,然后取消选择ADT提供的所有默认构建器
在同一窗口中单击New按钮,然后选择Program和单击OK

将出现新的构建器配置窗口。填写以下选项卡:

Main新构建器配置的选项卡



Refresh新构建器配置的选项卡



Environment新构建器配置的选项卡



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并等待直到清洁过程完成
在调用setContentView类中的MainActivity函数之后,立即添加下面给出的Java代码段:




更改build.gradle的开头归档到sourceCompatibility部分,如下所示:




右键单击该项目,然后选择Properties -> Java Compiler选项,并将所有符合性级别设置为Java8。这将使Eclipse识别lambda表达式之类的新Java 8构造。
在通知窗口中单击No
右键单击项目,然后选择Build project。 Eclipse将开始构建项目。

构建过程




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


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





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


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

HelloLambda应用程序



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



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

评论


但是您能够使用Android调试器调试此代码吗?我的猜测是堆栈/行号不兼容。似乎是在Android上使用Java 8开发的主要缺点。

–僵尸
2015年5月17日下午6:53

@Zombies是的,您仍然可以对其进行调试。一切正常。

–科尔尼采夫·阿纳托利(Korniltsev Anatoly)
15年7月5日在10:51

#4 楼

单击此链接以获取新更新。使用Java 8语言功能

旧答案

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


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


支持的Java 8语言功能和API


Android当前不支持所有Java 8语言功能。
但是,现在开发针对Android N预览的应用程序时以下功能可用:
>

默认和静态接口方法

Lambda表达式(也适用于API级别23及更低版本)

可重复的注释

方法参考(在API级别23和更低版本上也可用)

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

Update


注意:Android N将lambda表达式的实现基于
匿名类。这种方法允许它们向后兼容并在Android的早期版本上可执行。要在早期版本上测试
lambda表达式,请记住转到您的
build.gradle文件,并将compileSdkVersion和targetSdkVersion设置为
23或更低。


更新2

现在Android Studio 3.0稳定发行版支持Java 8库和Java 8语言功能(无Jack编译器)。

评论


我什么都不懂minSdkVersion是否有任何要求?

–WindRider
16年3月11日在10:57

我认为只有lambda表达式是向后兼容的,其他Java 8功能只能在N(或将来的版本)上使用。我没有测试过,但这是我从Android文档中了解的内容。因此,对于Java 8功能,除了lambda表达式外,minSdkVersion为N

–user4774371
16-3-11在11:28



所以...再过几年,直到N成为仪表板的领导者。 :(

–WindRider
16 Mar 11 '16 at 16:55

不幸的是。或直到Android以某种方式提供向后兼容性(例如lambda)

–user4774371
16年3月11日在17:05

@WindRider,您可以使用minSdkVersion 15及更高版本。目前,我在Lambdas的Android项目中使用minSdkVersion 17,并且一切正常。

– YYamil
17年2月7日在17:09

#5 楼

是的,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插件。



评论


Scala与apk打包非常重

– TechSpellBound
16年1月16日在12:02

请参阅此解决方案以获取更新的android studio 2.0,因为他们已经对有限的配置选项进行了更新。

–加拉夫·夏尔马
16-10-25在19:34

#6 楼

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

从Android SDK版本19开始,您可以通过这样做使用Java 7功能。尚未完全支持Java8。

评论


你是救星。您是否知道还有其他类似方法可以实现try-with-resources?

– Galets
2014年11月25日20:15

@galets还没有办法,但是我敢打赌Google会在将来的某个时候添加它。更多信息,请参见:stackoverflow.com/questions/16921337/…

–chaqke
2014年12月2日23:04

#7 楼

本机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.Repe atable
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!

#8 楼

Android从Android N开始正式支持Java8。

功能声明在这里,Java 8语言声明为:


改进的Java 8语言支持-我们很高兴将Java 8语言功能引入Android。使用Android的Jack编译器,您现在可以
在早于Gingerbread的Android版本上使用许多流行的Java 8语言功能,包括lambda和
更多功能。新功能
帮助减少样板代码。例如,当提供事件侦听器时,lambda可以替换
匿名内部类。现在,N或更高版本也提供了某些Java 8
语言功能,例如默认和静态方法,流和
功能接口。我们希望借助
Jack,在保持向后兼容性的同时更紧密地跟踪Java语言。


评论


到目前为止,它仍然存在很多错误,例如,Instant Run不适用于lambda:如果您在lambda函数中更改了一些代码,则不会进行更改。

– adriendenat
17年5月11日在12:55

#9 楼

我们可以通过以下方式使用Java 8:






在build.gradle(项目:myProject)中添加以下内容

 classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
 



在build.gradle中(模块:myModule)添加以下内容

< pre class =“ lang-groovy prettyprint-override”> apply plugin: 'me.tatarka.retrolambda' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }



评论


与建议复古lambda的第一个答案有何不同?

–马滕·博德威斯(Maarten Bodewes)
16年1月4日,下午1:37

@MaartenBodewes似乎指出,它已经比接受的答案简单得多。请参阅medium.com/android-news/…

– TechSpellBound
16年1月16日在12:09

不要使用它。插件有问题

–阿克塞·穆卡丹(Akshay Mukadam)
16年2月5日,11:06

#10 楼

UPDATE 2020/01/17

Android Studio 4.0包括通过使用称为desugaring的技术来支持使用多种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}的最新添加

可选(java.util.Optionaljava.util.OptionalIntjava.util.OptionalDouble)和一些其他新类对上述API有用
java.util.concurrent.atomic的一些新增功能(AtomicIntegerAtomicLongAtomicReference的新方法)

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()

此外,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

评论


我不明白的是,android studio与java8支持有什么关系(intellij以前没有)吗?这是否意味着如果我在终端上使用gradle来编译项目,它将无法编译?

– cesarferreira
17年4月19日在16:42

@cesarferreira您需要将Android插件更新为最新版本(目前为2.4.0-alpha6)。请检查答案中的引号。

–爱多伦
17年4月20日在9:56

将其添加到我正在使用的模块(不是应用程序)中是个难处。添加到应用程序模块无济于事。

– Surekha
2月5日21:09

那么我们也可以在API 21中使用Java 8吗?

– H.Karatsanov
7月3日12:54

@ H.Karatsanov是的,您可以在API 21中使用Java 8语言功能,并且可以借助Android Studio 4.0+中提供的desugaring来使用提到的Java 8 API。

–爱多伦
7月3日18:31

#11 楼

简单方法

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



打开项目结构


通过按Ctrl + Shift + Alt + S
File > Project Structure


,在“项目结构”对话框中将源兼容性和目标兼容性更新为1.8,如图所示(单击文件>项目结构)。



或者您可以使用gradle

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


同步项目。就是这样!

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

评论


这个解决方案为我工作:stackoverflow.com/a/55467237/4698320

–DäñishShärmà
19年7月30日在13:58

#12 楼

当我在大约2年前问这个问题时,答案实际上是“官方”否,但是正如ekcr1的答案所指出的,如果您使用Retrolamba,则可以使用最受期待的功能之一(lambda)。当时我仍在使用eclipse,因为Android Studio处于“预览”模式,所以我从没尝试过这种方法。

今天,我认为“正式”答案仍然是“否”,而Retrolamba似乎仍然是一个不错的选择,对于那些愿意沿着某种“非正式”路线可以走的人,还有另一种选择,那就是Kotlin。

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

https://kotlinlang.org

,或观看此utube演讲视频作者:杰克·沃顿(Jake Wharton)

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

#13 楼

最新消息:

Google宣布,借助Android N和Android Studio 2.1+,该平台将支持Java8。Studio2.1的稳定版本也已发布。

最后,我们可以使用lambda表达式。 for循环中不再有列表过滤器。霍瑞。

#14 楼

添加此配置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项目添加对Java 8的支持的正确方法。不利的一面是,启用千斤顶后,即时运行当前不会运行。

–艾诺特·内格鲁(Ionut Negru)
16-10-13在16:53

不要全力支持。

–艾哈迈德·阿加扎德(Ahmad Aghazadeh)
16-10-13在16:55

#15 楼

Google刚刚宣布Java 8将由Android原生支持,而Jack工具链将弃用:


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


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

#16 楼

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


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


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

#17 楼

将此行添加到模块lvl build gradle

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

#18 楼

更新2019/10/28

Android Studio 4.0解决了此问题。

D8编译器在编译时和您的应用程序中将Java 8本机API的反向端口修补到您的APK中在运行时将使用该代码,而不是本机API。该过程称为反欺诈。

#19 楼

我针对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编译器。新建项目向导[文件→新建→项目]为针对N的项目生成正确的配置。


Android Studio 2.1之前的版本:
Android尚不支持Java 1.8 (它仅支持1.7),因此您不能使用lambdas之类的Java 8功能。
此答案提供了有关Android Studio兼容性的更多详细信息;它指出:

如果您想使用lambdas(Android 8中的主要功能之一),则可以使用gradle-retrolamba

如果您想了解更多有关使用gradle-retrolambda,此答案提供了很多有关此操作的详细信息。

评论


嗨,Farbod!我正在使用AndroidStudio 2.2.2。“ SDK位置”(在Mac FWIW上)只是说“ / Users / me / Library / Android / sdk”。我在使用Java8-如何使用Java8吗?谢谢!

–法蒂
16 Dec 3'在18:17

#20 楼

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

当前,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()和与可重复批注关联的反射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)



#21 楼

我在3年前问这个问题,显然这些年来答案已经改变。由于上面已经回答了许多问题,所以有时返回答案是。我从未更新过接受的答案,因为当时它是正确的答案。 (我不确定堆栈溢出策略是什么)。

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

我还没有找到官方的新闻稿,但我确实观看了一些Google I / O视频在哪里宣布。这是Kotlin团队在公告上的博客文章的链接。

#22 楼

添加以下内容对我来说已解决此问题(Android Studio 2.3.2):


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



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


#23 楼

Android Studio现在支持Java 8的子集。只需从下面的窗口中进行“源和目标兼容性”调整:

文件->项目结构



更多信息在下面的链接。

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

#24 楼

添加Java 8支持的最简单方法
 compileOptions {
    targetCompatibility = '1.8'
    sourceCompatibility = '1.8'
 }


只需将其添加到build.gradle文件中即可。

评论


重复的答案,低质量

– JanPl
5月23日15:52

#25 楼

以上所有解决方案似乎都无法在2019年与最新的Android Studio 3.4+一起使用。

我想出了一个完美且最新的解决方案,可以将Android Project迁移或升级到Java 8。 br />
解决方案:
单击文件->项目结构->模块->属性选项卡。
将源兼容性和目标兼容性更改为1.8(Java 8)



#26 楼

是的,您可以在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