Jack(Java Android编译器套件)如何影响Scala开发人员

现在随着杰克 Google的发布澄清了Java在Android方面的可预见的未来。 但是对Scala和其他基于JVM的语言开发人员有什么影响。 尤其是:

  1. 由于自己的编译器生成Java字节码,Scala确实很神奇。 但杰克工具链不处理字节码 。 将生成的字节码获得杰克处理的优化好处吗?
  2. 从Scala 12开始,只支持Java 8+。 这就是生成的字节码也是Java 8+。 杰克能否使用Java 8字节码(没有或有限制)?
  3. 可以新支持的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的优势被降低了。


在这里输入图像说明

了解有两个工具被引入是很重要的:

所以这听起来像这里有两个单独的问题

  • 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工具链。