Jack(Java Android编译器工具包)将如何影响Scala开发人员

时间:2016-03-12 14:24:36

标签: android scala java-8

现在宣布Jack Google澄清了Java与Android相关的可预见的未来。但是对Scala和其他基于JVM的语言开发人员有什么影响。特别是:

  1. 由于自己的编译器产生Java字节码,Scala确实很神奇。 But Jack toolchain doesn't deal with bytecode。生成的字节码是否会获得Jack处理的任何优化优势?
  2. 从Scala 12开始,仅支持Java 8+。那就是生成的字节码也是Java 8+。 Jack可以使用Java 8字节码(没有或有限制)?
  3. 新支持的Java 8功能是否可用于开发旧版Android(minSdkVersion<'N'),或者我应该为每个Java版本维护单独的分支? (文档中不清楚)。
  4. 所有这些问题归结为一个问题:未来可以将Scala用于Android开发而不会牺牲新Scala功能和新Android工具链的优势吗?

    相关阅读:

    请在评论或回答中分享相关链接

    相关问题:

    相关:

    请投票给Jack工具功能请求:

    编辑:

    我试图推理(不回答)我的问题,希望如果我错了,专家会纠正我。

    下面是一个假设的Jack构建流程,其中包含一些额外的块,这些块是根据我的逻辑以及从可用文档中学到的内容添加的。

    基本假设是Dalvik支持Java 7字节码指令。如果这是正确的Java 8指令不能直接传递给Dalvik,它们应该以某种方式转换为Java 7.(可能类似于Scala编译器总是这样做。)

    问题是转型发生在哪里?似乎Jill现在不能处理Java 8字节码,因此可能发生在假设流程的块(3)中。如果这是正确的,那么只有Java源项目文件可以进行转换,并且对第二个问题的回答是 - 否则。在Jill能够执行它之前,不能使用库中的Java 8类。 (如果可能的话)。那就是我们不能使用Scala 12 +。

    如果在块(6)中执行所有代码优化而不是对 1-st question 的回答是 - 是。转换为库.jar的Scala代码可以从Jack优化中受益。但初步应将其转换为.jayce(类似AST的表示),这将增加构建时间。

    最后,Jack生成.dex Dalvik字节码,以保持与较旧的Dalvik运行时兼容(ART也使用Dalvik字节码)。所以 3-d问题的答案是:是的,可以使用Java 8功能。但仅限于项目Java源代码。 App仍与任何运行时兼容。但是由于转换为Java 7(Dalvik字节码),Java 8的优势被删除。

    enter image description here

3 个答案:

答案 0 :(得分:5)

了解引入了 2工具非常重要:

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

  • Scala兼容性
    当Jack编译Java源代码时,Jack不会支持Scala 然而,Scala 2.11编译为Java 1.6字节码,因此Jill将能够选择该代码并转换为jack文件以提供Jack编译器。
    请参阅Android N Java 8 features (Jack compiler) and 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

答案 1 :(得分:1)

琼是正确的,但我认为Jill会在某些时候支持Java 8,否则将无法在Android应用程序中使用Java 8,因为他们将代码打包在jar中在aar内部的文件,我不认为这种格式的变化很快就会发生。无论如何,我们只能猜测,因为谷歌目前是关于这些变化的黑盒子。

自2017年新信息发布以来进行了修改: jack工具链现已弃用,旧的dex / javac堆栈将获得java8支持,因此scala现在不会改变任何内容。

答案 2 :(得分:1)

谷歌刚宣布杰克工具链将弃用杰克工具链,Android会直接在当前的javac和dx工具集中添加"支持Java 8语言功能"

来源:https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

  

我们知道我们的Android开发人员社区对Java 8语言功能的良好支持关注程度,并且我们正在改变我们支持它们的方式。

  

我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。