Ysc*_*sch 12 java eclipse lambda android adt
我需要将一些代码与Java lambda函数的广泛使用集成在一起.我有几个限制要求我使用Eclipse Mars开发我的项目,使用最新的ADT插件,而不是Android Studio.
问题是使用Lambda函数需要使用1.8 JDK兼容性,但是如果这样设置,我收到以下消息:
Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead.
Run Code Online (Sandbox Code Playgroud)
这两个人怎么能和睦相处?
编辑:这不是建议的问题的重复,因为我问的是ADT Eclipse,自从上一次更新这个问题以来,Android确实支持Java 8,所以这不仅不重复,而且现在问题是(在上次更新后的1.5年后)已过时.
Aar*_* He 11
正如@dhke所说,Android上还没有支持Java 8.
但您仍然可以使用JDK 8来开发Android应用程序.您只需将源兼容性设置为6或7取决于您的minSDKVersion
.因此,您将丢失Java 8中引入的任何新功能,例如lambda.
由于您广泛使用lambda,Retrolambda可能是您的选择.它为Java 8之前的版本提供lambda的后端口.它具有Maven/Gradle /命令行插件以启用支持.
如果您需要其他Java 8功能,AFAIK,ThreeTen ABP为Java 8 Date Time API提供后端支持.
您目前无法(至少在Android 5.1.1中)在Android上使用lambda函数.
Lambda函数需要新的Dalvik(不一定是JVM!)操作码(liberate-variable,box-lambda,unbox-lambda,capture-variable,create-lambda,invoke-lambda),Dalvik和ART目前都不支持.
看起来谷歌可能已安排(虽然似乎没有任何官方)Java 8.1支持5.1.1后(API级别23及更高版本).至少smali反汇编程序已经添加了对API级别的明确引用的支持:
https://github.com/JesusFreke/smali/commit/144951a9e9e6c87866245f2bdeebf0ebedaa0e38:
添加新的-X/ - 实验标志到[dis]汇编不在艺术中的操作码
- 添加新的操作码liberate-variable,box-lambda,unbox-lambda,capture-variable,create-lambda,invoke-lambda
- 添加对25x指令编码的支持
- 添加LambdaTest以正确检查新的操作码组装/反汇编
并且
options.apiLevel = 23; // since we need at least level 23 for lambda opcodes
Run Code Online (Sandbox Code Playgroud)
这仅标记操作码,而不是必要的库更改.它也没有告诉我们关于Android本身的任何信息,因此我建议不要将其作为官方发布时间表.
归档时间: |
|
查看次数: |
12366 次 |
最近记录: |