Jack(Java Android编译器套件)如何影响Scala开发人员
现在随着杰克 Google的发布澄清了Java在Android方面的可预见的未来。 但是对Scala和其他基于JVM的语言开发人员有什么影响。 尤其是:
- 由于自己的编译器生成Java字节码,Scala确实很神奇。 但杰克工具链不处理字节码 。 将生成的字节码获得杰克处理的优化好处吗?
- 从Scala 12开始,只支持Java 8+。 这就是生成的字节码也是Java 8+。 杰克能否使用Java 8字节码(没有或有限制)?
- 可以新支持的Java 8function用于开发较旧的Android版本(minSdkVersion <'N'),或者我应该为每个Java版本维护单独的分支? (从文档中不清楚)。
所有这些问题归结为一个:Scala可以用于未来的Android开发,而不牺牲新的Scalafunction和新的Android工具链的好处?
相关阅读:
-
Java 8语言特性
-
杰克(Java的Android编译器套件)
-
新的Android工具链 – 杰克和吉尔
-
杰克和吉尔构build系统(幻灯片)
-
Hello World,满足我们新的实验工具链
-
斯卡拉2.12路线图
请在评论或答案中分享相关链接
相关问题:
- Android N Java 8function(Jack编译器)和Kotlin互操作
有关:
- 在Android上的小组讨论
请为杰克工具function请求投票:
- Jill支持Java 8字节码(库)
- 支持Java 8语言function
编辑:
我试图推理(不回答)我的问题,希望专家会纠正我,如果我错了。
下面是Jack的一个假设stream程,其中增加了一些基于我的逻辑和我从可用文档中学到的额外的块。
基本的假设是,Dalvik最多支持Java 7字节码指令。 如果这是正确的Java 8指令不能直接传递给Dalvik,它们应该以某种方式转换为Java 7.(可能类似于Scala编译器总是这样)。
比问题是转换发生在哪里? 似乎Jill现在不能处理Java 8字节码,所以可能发生在假设stream程的块(3)中。 如果这是正确的,那么只有Java源代码项目文件可以进行转换, 第二个问题的答案是否定的。编号的Java 8类只有在Jill能够做到的情况下才能使用(如果可能的话) 。 那就是我们不能使用Scala 12+。
如果在块(6)中执行所有的代码优化,则比第一个问题的答案是 – 是的。 被转换为库.jar的Scala代码可以从Jack优化中受益。 但初步应该转化为.jayce(类似AST的表示),这会增加构build时间。
最后,Jack生成.dex Dalvik字节码以保持与较早的Dalvik运行时(ART也消耗Dalvik字节码)的兼容性。 所以三维问题的答案是:是的,可以使用Java 8function。 但只有在项目Java源。 应用程序仍然与任何运行时兼容。 但是由于转换到Java 7(Dalvik字节码),Java 8的优势被降低了。
了解有两个工具被引入是很重要的:
-
杰克 :一个新的编译器来取代复杂的javac + proguard + dx
-
Jill :一个库链接器,可以链接当前编译的库(.class)等等。
见http://tools.android.com/tech-docs/jackandjill
所以这听起来像这里有两个单独的问题 :
-
Scala兼容性 :
Jack不支持Scala,因为Jack编译了Java源代码。
然而,Scala 2.11编译为Java 1.6字节码,因此Jill将能够select该代码并将其转换为jack文件以提供Jack编译器。
请参阅Android N Java 8特性(Jack编译器)和Kotlin interop (Kotlin与Scala相同,因为它是JVM语言) -
Java 8,因此Scala 2.12+,兼容性 :
这部分正在开发中,如果Jack / Jill支持Java 8,那么它也将支持Scala 2.12+(通过Jill)。 如果不是,Java 8开发人员与Scala 2.12开发人员在同一条船上。
在Jack支持Java 8而不是Jill的情况下,Java 8库开发人员将与Scala 2.12开发人员在同一条船上。
请参阅https://www.guardsquare.com/blog/DroidconLondon2015
Joan是正确的,但是我认为Jill在某些时候会支持Java 8,否则将不可能在Android库中使用Java 8,这将被android应用程序所使用,因为他们将代码打包在jar文件中AAR,我看不到这种格式变化很快就会发生。 无论如何,我们只能猜测,因为谷歌目前是一个黑盒子相对于这种变化。
谷歌刚刚宣布杰克工具链将不赞成杰克工具链和Android添加“Java 8语言function的支持直接到当前的javac和dx工具集”
资料来源: https : //android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html
我们知道我们的Android开发人员社区关心对Java 8语言function的良好支持,我们正在改变我们支持他们的方式。
和:
我们决定直接在当前的javac和dx工具集中添加对Java 8语言特性的支持,并且弃用Jack工具链。