现在宣布Jack Google澄清了Java与Android相关的可预见的未来。但是对Scala和其他基于JVM的语言开发人员有什么影响。特别是:
所有这些问题归结为一个问题:未来可以将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的优势被删除。
答案 0 :(得分:5)
了解引入了 2工具非常重要:
杰克:一个新的编译器来替换复杂的javac + proguard + dx
Jill :一个库链接器,可以链接当前编译的库(.class)等。
见http://tools.android.com/tech-docs/jackandjill
所以听起来这里有 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)
自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工具链。