在下载/设置Java 8之前,可以有人指向任何说Java 8的“官方”文档吗? Android开发是否支持。
#1 楼
java 8Android支持所有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 8
和JDK 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 Tools
和Andoid 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代码编辑器中令人讨厌的
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
转到项目的根文件夹,然后删除文件
gradlew
和gradlew.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.java
和buildConfig.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/17Android 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.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
文件中包含以下内容: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 gradlecompileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
#18 楼
更新2019/10/28Android 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
评论
我不知道官方声明,但是我已经将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