nPn*_*nPn 594 java android java-8 android-gradle-plugin
在网上搜索,目前尚不清楚Java 8是否支持Android开发.
在我下载/设置Java 8之前,有人可以在任何"官方"文档中指出我说Java 8是否支持Android开发.
ekc*_*cr1 347
更新2017/11/04 - Android Studio 3.0现在已经 gradle-retrolambda
不再需要Java 8的本机支持.请参阅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功能代替官方支持,这是一个黑客攻击.
Eng*_*r T 185
Android支持所有Java 7语言功能和Java 8语言功能的子集,这些功能因平台版本而异.
检查支持java 8的哪些功能
我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链.有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作.展望未来,Android构建系统将本身支持Java 8语言功能.我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定.
对于喜欢Eclipse的老开发者,谷歌停止支持Eclipse Android Developer工具
如果您安装了Java 8 JDK,那么试一试,如果出现任何问题,请尝试从窗口菜单→ 首选项 → Java → 编译器中将编译器设置为1.6 .Java 7也可以工作:
如果您的目标是Android 5.0及更高版本,则需要Java 7或更高版本.
安装多个JDK并尝试.
Suf*_*ori 99
您确实可以使用gradle-retrolamba
gradle构建依赖关系来使用Java 8进行Android开发.
下面是我最近为Android开发运行lambda表达式所遵循的完整指南.最后提到了本指南的原始来源.
在本指南中,将演示一种将一些Java 8功能引入Android开发工具的方法,特别针对 Eclipse IDE.但是,本指南中将描述的步骤也可能适用于Google的新起义开发环境Android Studio.它基于JetBrains的流行IntelliJ Idea IDE的社区版本,并且最近在2014年7月初由谷歌升级为其"beta"版本,稍早于本指南编写之前.Eclipse将至少在一段时间内仍然是着名的开发环境,并且考虑到大多数Android项目都是使用Eclipse开发的,将一种新的Java 8特性(如lambda表达式)引入ADT的方法似乎对开发人员非常有用.
Android Development基于一个名为Apache Harmony Project的自定义Java实现,该实现于2011年终止.Android Development中最常用的Java语法是Java 6(v1.6),Java 7(v1.7)也部分支持KitKat版(Android 4.4.+).因此,如果不对开发工具进行一些调整,则不能在Android应用程序开发中直接使用像lambda表达式这样的Java 8功能.幸运的是,这些构造基本上是一些"语法糖"增强功能,它们为开发人员提供了诸如"匿名类"之类的缺点,并且可以将它们翻译成Java 6或Java 7类.
最近将Java 8源代码转换为较低Java版本的方法称为RetroLambda.该库使开发人员在Java 7甚至更低版本上使用lambda表达式运行Java 8代码.遗憾的是,现在RetroLambda不支持lambda表达式以外的Java 8特性,但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 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使您可以使用CyanogenMod
由Oracle VirtualBox执行的映像来准备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网站: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构建器创建的项目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
选项并将所有合规性级别设置为Java 8.这将使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表达式的代码片段正常工作
来源:在Android开发人员工具中使用Java 8 Lambda表达式
小智 42
请点击此链接获取最新信息.使用Java 8语言功能
老答案
截至Android N预览版Android支持Java 8的有限功能,请参阅Java 8语言功能
要开始使用这些功能,您需要下载并设置Android Studio 2.1 和Android N预览SDK,其中包括所需的Jack工具链和更新的Gradle Android插件.如果您尚未安装Android N Preview SDK,请参阅针对Android N设置开发.
支持的Java 8语言功能和API
Android目前不支持所有Java 8语言功能.但是,在开发面向Android N预览的应用时,现在可以使用以下功能:
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编译器).
siv*_*ivi 20
现在有可能
但是你需要在java 1.8上运行你的设备rom并启用"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
}
}
Run Code Online (Sandbox Code Playgroud)
Java 8似乎是Android studio 2.0的运行java引擎,但在我检查后它仍然不接受java 8的语法,你现在无法从android studio中选择编译器.但是,如果您需要Android客户端中的函数编程机制,则可以使用scala插件.
Dha*_*ani 15
原生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
}
Run Code Online (Sandbox Code Playgroud)
通过将以下内容添加到gradle.properties文件来禁用对Java 8语言功能的支持:
android.enableDesugar=false
Run Code Online (Sandbox Code Playgroud)
你完成了!你现在可以使用原生java8了!
Jay*_*Jay 14
Android OFFICIALLY从Android N开始支持Java 8.
功能公告在这里,Java 8语言公告是:
改进的Java 8语言支持 - 我们很高兴将Java 8语言功能引入Android.使用Android的Jack编译器,您现在可以在Android版本上使用许多流行的Java 8语言功能,包括lambdas等,早在Gingerbread中.新功能有助于减少样板代码.例如,lambda可以在提供事件侦听器时替换匿名内部类.一些Java 8语言特性 - 如默认和静态方法,流和功能接口 - 现在也可在N及以上版本中使用.有了Jack,我们期待在保持向后兼容性的同时更紧密地跟踪Java语言.
Vis*_*Raj 12
我们可以使用Java 8:
在build.gradle(Project:myProject)中添加以下内容
classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
Run Code Online (Sandbox Code Playgroud)在build.gradle(Module:myModule)中添加以下内容
apply plugin: 'me.tatarka.retrolambda'
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)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文件中:
Run Code Online (Sandbox Code Playgroud)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
如图所示,在“项目结构”对话框中将“ 源兼容性”和“ 目标兼容性”更新为1.8(单击“文件”>“项目结构”)。
或者你可以使用gradle
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
同步项目。就是这样!
注意:可以为Android Studio 3.0.0或更高版本启用Java 1.8支持。请参阅文档以进一步阅读。
差不多两年前,当我问这个问题时,答案确实是"正式"否定,但正如ekcr1的回答所指出的,如果你使用retrolamba,你可以得到一个最受期待的功能(lambdas).当时我还在使用eclipse,因为Android Studio处于"预览"模式,所以我从未尝试过这条道路.
今天,我认为"官方"答案仍然没有,虽然retrolamba似乎仍然是一个很好的方式,但对于那些愿意采取某种"非官方"路线的人来说,还有另一种选择,即Kotlin.
今天Kotlin达到了1.0.0.对于那些不熟悉Kotlin的人,可以在他们的网站上找到更多信息:
或观看杰克沃顿给出的这个演讲视频
https://www.youtube.com/watch?v=A2LukgT2mKc
归档时间: |
|
查看次数: |
265273 次 |
最近记录: |