在网上搜索,目前尚不清楚是否支持Java 8进行Android开发。
在我下载/设置Java 8之前,有人可以指出任何"官方" Android开发支持或不支持Java 8的文档。
答案 0 :(得分:343)
更新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功能代替官方支持,这就是一个黑客攻击。
答案 1 :(得分:175)
Android支持所有Java 7语言功能和Java 8语言功能的一部分,这些功能因平台版本而异。
检查支持java 8的哪些功能
我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作。展望未来,Android构建系统将本身支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定。
Future of Java 8 Language Feature Support on Android
对于喜欢Eclipse的老开发者,google stops support Eclipse Android Developer tools
如果您安装了Java 8 JDK,那么试一试,如果出现任何问题,请尝试通过窗口菜单→首选项→ Java 将Eclipse中的编译器设置为1.6 →编译器。 Java 7也将起作用:
如果您要定位Android 5.0和,则需要Java 7或更高版本 更高。
安装多个JDK并尝试。
答案 2 :(得分:42)
请点击此链接获取最新动态。 Use Java 8 language features
旧答案
从 Android N preview 发布 Java 8 的Android支持有限功能,请参阅Java 8 Language Features
要开始使用这些功能,您需要下载并设置Android Studio 2.1和Android N预览SDK,其中包括 需要Jack工具链和更新的Gradle安卓插件。如果你 尚未安装Android N Preview SDK,请参阅Set Up to Develop for Android N。
支持的Java 8语言功能和API
Android目前不支持所有Java 8语言功能。 但是,在开发应用程序时,现在可以使用以下功能 定位Android N预览:
Default and static interface methods
Lambda expressions(也可在API级别23及更低版本上使用)
Method References(也可在API级别23及更低版本上使用)
Android支持一些额外的Java 8功能,您可以从Java 8 Language Features
查看完整的详细信息<强>更新强>
注意:Android N基于lambda表达式的实现 匿名课程。这种方法允许他们倒退 在早期版本的Android上兼容和可执行。去测试 早期版本的lambda表达式,记得去你的 build.gradle文件,并将compileSdkVersion和targetSdkVersion设置为 23岁或以下。
更新2
现在Android studio 3.0稳定版本支持Java 8 libraries and Java 8 language features(没有Jack编译器)。
答案 3 :(得分:20)
现在有可能
但是你需要在java 1.8上运行你的设备rom并启用&#34; jackOptions&#34;运行它。 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插件。
答案 4 :(得分:19)
Android使用从Java 6分支出来的Java。
从Android SDK版本19开始,您可以使用Java 7功能by doing this。尚未完全支持Java 8(
)答案 5 :(得分:14)
Android OFFICIALLY从Android N开始支持Java 8.
Feature announcements are here,Java 8语言公告是:
改进的Java 8语言支持 - 我们很高兴能将Java 8语言功能引入Android。使用Android的Jack编译器,你可以 现在使用许多流行的Java 8语言功能,包括lambda和 更多,早在Android版本上就像Gingerbread一样。新功能 帮助减少样板代码。例如,lambdas可以替代 提供事件侦听器时的匿名内部类。一些Java 8 语言功能 - 类似于默认和静态方法,流和 功能接口 - 现在也可在N及以上版本上使用。同 杰克,我们期待更密切地跟踪Java语言 同时保持向后兼容性。
答案 6 :(得分:13)
Native Java 8到达android!终于来了!
从每个模块中删除Retrolambda插件和retrolambda块 build.gradle文件:
要禁用Jack并切换到默认工具链,只需删除 jackOptions阻止来自模块的build.gradle文件
要开始使用受支持的Java 8语言功能,请将Android插件更新为3.0.0(或更高版本)
从Android Studio 3.0开始,Android 8现在支持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!
答案 7 :(得分:12)
我们可以使用Java 8来使用:
在build.gradle(Project:myProject)中添加以下内容
classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
在build.gradle(Module:myModule)中添加以下内容
apply plugin: 'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
答案 8 :(得分:7)
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(或更高版本)并将以下内容添加到您的 module的build.gradle文件:
android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
详情请访问:
https://developer.android.com/studio/write/java8-support.html
答案 9 :(得分:5)
当我在大约两年前提出这个问题时,答案确实是“正式”否定,但正如ekcr1的答案所指出的,如果你使用retrolamba,你可以得到一个最受期待的功能(lambdas)。当时我还在使用eclipse,因为Android Studio处于“预览”模式,所以我从未尝试过这条路。
今天,我认为“官方”答案仍然没有,虽然retrolamba似乎仍然是一个很好的方式,但对于那些愿意采取某种“非正式”路线的人来说,还有另一种选择,即Kotlin。
今天Kotlin达到了1.0.0。对于那些不熟悉Kotlin的人,可以在他们的网站上找到更多信息:
或观看杰克沃顿提供的关于此演讲的视频:
答案 10 :(得分:4)
最新消息:
谷歌宣布,通过Android N和Android Studio 2.1+,平台将支持Java 8.同时发布了稳定版的Studio 2.1。
最后我们可以使用lambda表达式。 for循环中没有更多列表过滤器。 Horeeey。
答案 11 :(得分:4)
您可以为Android项目启用Java 1.8支持。
打开项目结构
通过按 Ctrl + Shift + Alt + S
或 File > Project Structure
注意:可以为 Android Studio 3.0.0 或更高版本启用Java 1.8支持。请参阅Documentation了解更多信息。
答案 12 :(得分:4)
添加此配置build.gradle和sync gradle:
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
// or
//sourceCompatibility 1.8
//targetCompatibility 1.8
}
}
答案 13 :(得分:2)
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
答案 14 :(得分:2)
是。我们很快就会使用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
答案 15 :(得分:1)
我想我会为那些正在寻找更新的东西的人发布一个更新的答案。
目前,Android和Android Studio正在支持Java 8功能的一个子集。根据位于on their website的Android文档,Google表示:
支持Java 8语言功能需要一个名为Jack的新编译器。 Jack仅在Android Studio 2.1及更高版本上受支持。因此,如果您想使用Java 8语言功能,则需要使用Android Studio 2.1来构建您的应用程序。
如果您已安装Android Studio,请务必点击帮助&gt;更新到最新版本。检查更新(在Mac,Android Studio&gt;检查更新)。如果您尚未在工作站上安装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(类)
实用程序API:
- java.util.function
- java.util.stream
要使用新的Java 8语言功能,您还需要使用Jack toolchain。这个新的Android工具链将Java语言源编译成Android可读的DEX字节码,具有自己的.jack库格式,并提供大多数工具链功能作为单个工具的一部分:重新打包,缩小,混淆和多索引。
以下是用于构建Android DEX文件的两个工具链的比较:
Legacy javac toolchain: javac (.java → .class) → dx (.class → .dex) New Jack toolchain: Jack (.java → .jack → .dex)
答案 16 :(得分:1)
3年前我问过这个问题,显然这些年来答案已经发生了变化。正如上面的许多人已经回答的那样,在某个时候,答案变成了是。我从未更新过接受的答案,因为当时答案是正确的。 (我不确定堆栈溢出策略是什么)
我只想为那些仍在搜索此主题的人添加另一个答案。截至2017年5月17日,Google还宣布Kotlin也是Android开发的官方语言。
我还没有找到正式的新闻稿,但我确实看到了宣布它的一些Google I / O videos。以下是Kotlin团队在公告中发布博客post的链接。
答案 17 :(得分:1)
添加以下内容为我解决了问题(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
...
}
答案 18 :(得分:1)
答案 19 :(得分:1)
我在Stack Overflow上向similar answer写了similar question,但这是答案的一部分。
新版Android Studio(2.1)支持Java 8功能。以下是Android Developers blogspot post的摘录:
... Android Studio 2.1版本包括对新Jack compiler的支持以及对Java 8的支持。
...
要在使用N Developer Preview进行开发时使用Java 8语言功能,您需要使用Jack编译器。新建项目向导[文件→新建→项目]为面向N的项目生成正确的配置。
Android还不支持Java 1.8(它最多只支持1.7),所以你不能使用像lambdas这样的Java 8功能。
This answer gives more detail on Android Studio's compatibility;它说:
如果你想使用lambdas,这是Android 8中Java 8的主要功能之一,你可以使用gradle-retrolamba
如果您想了解有关使用gradle-retrolambda
,this answer gives a lot of detail on doing that。
答案 20 :(得分:1)
将此行添加到lvl build gradel模块中
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
答案 21 :(得分:1)
添加Java 8支持的最简单方法
compileOptions {
targetCompatibility = '1.8'
sourceCompatibility = '1.8'
}
只需将其添加到您的build.gradle文件中即可。
答案 22 :(得分:0)
上述所有解决方案似乎都无法在 2019 中使用最新的 Android Studio 3.4 + 。
我想出了一个完美的,最新的解决方案,可以将您的Android项目迁移或升级到 Java 8 。
解决方案:
单击文件-> 项目结构-> 模块-> 属性标签。
将源兼容性和目标兼容性更改为 1.8(Java 8)
答案 23 :(得分:0)
更新2019/10/28
D8编译器在编译时将Java 8本机API的反向移植修补到您的APK中,并且您的应用将在运行时使用该代码,而不是本机API。该过程称为desugaring。
答案 24 :(得分:0)
是的,您可以在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
答案 25 :(得分:0)
Android Gradle 插件 3.0.0 及更高版本支持所有 Java 7 语言功能和 Java 8 语言功能的一个子集,这些功能因平台版本而异。使用 Android Gradle 插件 4.0.0 及更高版本构建您的应用时,您可以使用多种 Java 8 语言 API,而无需为您的应用设置最低 API 级别。
此页面描述了您可以使用的 Java 8 语言功能、如何正确配置您的项目以使用它们,以及您可能遇到的任何已知问题。
本文将对您有所帮助。我会把链接放在下面 https://developer.android.com/studio/write/java8-support