在网络上搜索,尚不清楚Android开发是否支持Java 8。
在我下载/设置Java 8之前,可以说一下任何“官方”文档说Android 8是否支持Java 8。
在网络上搜索,尚不清楚Android开发是否支持Java 8。
在我下载/设置Java 8之前,可以说一下任何“官方”文档说Android 8是否支持Java 8。
Answers:
Android支持所有Java 7语言功能以及部分Java 8语言功能,具体取决于平台版本。
检查支持Java 8的哪些功能
我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。在这个新方向上,依赖于Java类文件格式的现有工具和插件应继续起作用。展望未来,Android构建系统将原生支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享这个决定。
对于喜欢Eclipse的老开发人员,Google停止了对Eclipse Android Developer工具的支持
如果安装了Java 8 JDK,请尝试一下,如果出现任何问题,请尝试从窗口菜单→ 首选项 → Java → 编译器在Eclipse中将编译器设置为1.6 。Java 7也可以使用:
如果您定位的是Android 5.0或更高版本,则需要Java 7或更高版本。
安装多个JDK并尝试。
2017年11月4日更新- gradle-retrolambda
现在不再需要Android Studio 3.0对Java 8的本机支持。参见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功能来代替官方支持,这是一个黑客。
try-with-resources
仅自Kitkat开始有效。
您确实可以使用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开发的事实,一种将诸如lambda表达式之类的Java 8新功能引入ADT的方法对于开发人员而言似乎非常有用。
Android开发基于名为Apache Harmony Project的自定义Java实现,该实现于2011年终止。Android开发中最常用的Java语法是Java 6(v1.6)和Java 7(v1.7)。 KitKat版本(Android 4.4。+)。因此,如果不对开发工具进行一些调整,就不能直接在Android App开发中使用lambda表达式之类的Java 8功能。幸运的是,这些构造基本上是一些“语法糖”增强功能,这些功能为开发人员带来了诸如“匿名类”之类的缺点,并且可以将它们转换为Java 6或Java 7类。
将Java 8源代码转换为较低Java版本的最新方法称为RetroLambda。该库使开发人员可以在Java 7或更低版本的Java上运行带有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
必须共存的开发机器上。必须遵循以下步骤安装它们:
bin
文件夹添加到%PATH%
变量中JAVA_HOME
使用JDK 8主文件夹的路径值创建一个新的环境变量JAVA8_HOME
再次使用JDK 8主文件夹的路径值创建一个新的环境变量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
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%
变量中D:\adt\eclipse
D:\adt\workspace
Android SDK Manager
工具栏上的按钮Android SDK Build tools Rev. 19.1
和Android Support Library
唯一的。取消选择其他所有内容,然后安装这两个软件包。如果一切顺利,ADT将启动并运行。
还强烈建议安装以下工具:
Eclipse Kepler Java 8支持:它使Eclipse能够识别新的Java 8语法扩展,并使您摆脱red dots
Java代码编辑器中的烦恼。它可能是通过Help -> Install New Software
Eclipse 安装的。在该字段中输入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并未随附Eclipse Marketplace Client
。因此,您首先需要Eclipse Marketplace Client
通过Install New Software
Eclipse中的工具进行安装。在Work with
字段中输入http //:download.eclipse.org/mpc/kepler/ 并继续安装。安装完成后Eclipse Marketplace Client
,你可以搜索Nodeclipse/Enide Gradle
在Eclipse Marketplace Client
并安装它。
Genymotion虚拟设备:它是Android Virtual Device
ADT随附默认值的绝佳替代品。AVD非常烦人,并且无缘无故地崩溃。Genymotion使您可以使用Oracle VirtualBoxCyanogenMod
执行的映像来准备Android VD 。它的单用户许可证是免费的,可以从http://www.genymotion.com下载。只需登录,它也可以集成到Eclipse中。详细信息可以在下面找到:
https://cloud.genymotion.com/page/doc/#collapse8
以下是基于Android 4.3的CyanogenMod虚拟设备的屏幕截图,
它可能被视为运行在基于x86或x64的个人计算机上的功能完善的Android设备。为了Google PlayStore
在此虚拟设备上使用Google服务,gapps
必须将其使用的Android版本的映像刷新到该设备上。一个适当gapps
的设备图像可以从CyanogenMod的网站上下载:
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.zipD:\adt\gradle
GRADLE_HOME
用Gradle安装文件夹的路径值定义一个新的环境变量,例如D:\adt\gradle
D:\adt\gradle\bin
到%PATH%
变量中gradle -v
命令,并验证它是否已启动并正在运行。如果您成功完成了这一步,则意味着您已准备好使用Java 8功能创建第一个Android应用程序。将创建一个简单的应用程序来演示上一节中描述的工具的用法。您可以简单地按照以下步骤进行操作,以深入了解在Android Developer Tools中使用lambda表达式:
File -> New -> Other -> Android -> Android Application Project
Next
以下表单上的Finish
按钮,然后单击最后一个表单上的按钮。等到ADT完成加载项目New -> Folder
并命名builders
gen (Generated Java Files)
文件夹并将其删除。Gradle将很快为我们生成相同的文件,并将它们添加到s build path. The
不再需要默认Ant构建器创建的project gen`文件夹中,并且该文件夹下的构件将被淘汰。在builders
文件夹下创建以下批处理文件:
如下填写这些批处理文件:
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
文件夹Project -> Clean
菜单选项。填写显示如下的表格:Clean Project
窗口
OK
并等待清洁过程完成setContentView
在MainActivity
类的函数调用之后,立即添加下面给出的Java代码段:build.gradle
文件的开头,直到该sourceCompatibility
部分,如下所示:Properties -> Java Compiler
选项,并将所有符合性级别设置为Java8。这将使Eclipse识别出新的Java 8构造,例如lambda表达式。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上所示:您可能会在LogCat
窗口中观察到带有简单lambda表达式的代码段可以正常工作
单击此链接以获取新更新。使用Java 8语言功能
旧答案
从Android N预览版开始,Android支持Java 8的有限功能,请参阅Java 8语言功能。
要开始使用这些功能,您需要下载并设置Android Studio 2.1 和Android N Preview SDK,其中包括所需的Jack工具链和更新的Android Gradle插件。如果尚未安装Android N预览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编译器)。
minSdkVersion
吗?
现在有可能
但是您将需要让您的设备在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插件。
Android使用从Java 6分支出来的Java。
由于Android的SDK版本19,您可以使用Java 7层的功能做这个。尚未完全支持Java 8。
本机Java 8到达Android!最后!
从每个模块的build.gradle文件中删除Retrolambda插件和retrolambda块:
要禁用Jack并切换到默认工具链,只需从模块的build.gradle文件中删除jackOptions块
要开始使用受支持的Java 8语言功能,请将Android插件更新为3.0.0(或更高版本)
从Android Studio 3.0开始,Android现在原生支持Java 8语言功能:
同样从最低API级别24开始,可以使用以下Java 8 API:
将这些行添加到应用程序模块的build.gradle中,以告知项目语言级别:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
通过将以下内容添加到gradle.properties文件中,禁用对Java 8语言功能的支持:
android.enableDesugar=false
你完成了!您现在可以使用本机java8!
Android从Android N开始正式支持Java 8。
功能公告在这里,Java 8语言公告是:
改进的Java 8语言支持 -我们很高兴将Java 8语言功能引入Android。借助Android的Jack编译器,您现在可以在Android版本(甚至是Gingerbread)上使用许多流行的Java 8语言功能,包括lambda等。新功能有助于减少样板代码。例如,在提供事件侦听器时,lambda可以替换匿名内部类。现在,N或更高版本还提供了一些Java 8语言功能,例如默认和静态方法,流和功能接口。有了Jack,我们期待在保持向后兼容性的同时更紧密地跟踪Java语言。
我们可以通过以下方式使用Java 8:
在build.gradle(项目:myProject)中添加以下内容
classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
在build.gradle(模块:myModule)中添加以下内容
apply plugin: 'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
更新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.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语言的某些功能提供内置支持,这些功能包括:
同样从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.4.0-alpha6
)。请检查答案中的引号。
您可以为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支持。请参阅文档以进一步阅读。
当我在大约2年前问这个问题时,答案实际上是“官方”否,但是正如ekcr1的答案所指出的那样,如果您使用Retrolamba,则可以使用最受期待的功能之一(lambda)。当时我仍在使用eclipse,因为Android Studio处于“预览”模式,所以我从未尝试过这种方法。
今天,我认为“官方”答案仍然没有,尽管Retrolamba似乎仍然是一个不错的选择,但对于那些愿意走某种“非官方”路线的人,还有另一种选择,那就是科特林。
今天科特林达到了1.0.0。对于不熟悉Kotlin的人,可以在以下网站上找到更多信息:
或观看有关杰克·沃顿(Jake Wharton)演讲的utube视频
添加此配置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
}
}
Google刚刚宣布Java 8将由Android原生支持,而Jack工具链将弃用:
我们决定直接在当前的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
是。我们将很快使用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
我对Stack Overflow上的类似问题写了类似的答案,但这是该答案的一部分。
新版Android Studio(2.1)支持Java 8功能。这是Android开发者博客文章的摘录:
... Android Studio 2.1版本包括对新的Jack编译器的支持和对Java 8的支持。
...
要在使用N Developer Preview进行开发时使用Java 8语言功能,您需要使用Jack编译器。新建项目向导[文件→新建→项目]为针对N的项目生成正确的配置。
Android尚不支持Java 1.8(仅支持1.7),因此您不能使用Java 8功能(如lambda)。
该答案提供了有关Android Studio兼容性的更多详细信息;它指出:
如果您想使用lambdas(Android 8中Java 8的主要功能之一),则可以使用gradle-retrolamba
"SDK Location"
(这是在Mac FWIW上)只是说"/Users/me/Library/Android/sdk"
我在使用Java8-如何使用Java8?谢谢!
我想我会为那些正在寻找更多最新信息的人发布更新的答案。
当前,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(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)
添加以下内容为我解决了此问题(Android Studio 2.3.2):
build.gradle(项目)
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
...
}
Android Studio现在支持Java 8的子集。只需从下面的窗口中进行“源和目标兼容性”调整:
文件->项目结构
以下链接提供了更多信息。
https://developer.android.com/studio/write/java8-support.html
更新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'
}
只需将其添加到您的build.gradle文件中即可。