Android N Java 8功能(Jack编译器)和Kotlin互操作

Android N Java 8功能(Jack编译器)和Kotlin互操作,java,android,kotlin,android-jack-and-jill,Java,Android,Kotlin,Android Jack And Jill,更新3。 科特林是。谷歌。哎呀 更新2:它看起来像。我是一个快乐的kotlin用户:) 更新:哈迪·哈里里,来自JetBrains。我会更新这个帖子一旦他们这样做 ==下一步不推荐的内容=== 谷歌刚刚发布了即将发布的安卓N的预览版,其中有一些有趣的功能,最引人注目的是部分功能。这是可能的,因为新的谷歌正在努力 使用javac或kotlinc的当前工具链: javac(.java-->.class)-->dx(.class-->.dex) kotlinc(.kt-->.class)-->dx

更新3。 科特林是。谷歌。哎呀

更新2:它看起来像。我是一个快乐的kotlin用户:)

更新:哈迪·哈里里,来自JetBrains。我会更新这个帖子一旦他们这样做


==下一步不推荐的内容===

谷歌刚刚发布了即将发布的安卓N的预览版,其中有一些有趣的功能,最引人注目的是部分功能。这是可能的,因为新的谷歌正在努力

使用javackotlinc的当前工具链:
javac
.java
-->
.class
)-->dx
.class
-->
.dex

kotlinc
.kt
-->
.class
)-->dx
.class
-->
.dex

新千斤顶工具链:
Jack
.java
-->
.Jack
-->
.dex

我假设谷歌将推动将杰克作为Android开发的默认工具链。 更新:杰克现在正在通话。亚斯

我的问题是,作为Android开发的kotlin用户,这个新的工具链将如何影响我?我会被“困在过去”吗?

更新(2017年3月16日)

幸运的是,Jack死了,因此不会影响Kotlin的开发人员


如果杰克是未来,那么你会被科特林困在过去。目前,Jack不支持将非Java源代码编译成Dalvik字节码的插件。即使JetBrains做到了,它也需要向Kotlin编译器添加一个新的后端,这不是一个简单的任务。因此,你必须将Kotlin与Jill一起使用,它将与你现在使用的工具链非常相似

如下图所示,即使无法显式关闭Jack,您仍然可以将项目转换为库项目以使用Jill。应用程序项目将仅引用此库项目

我看到Kotlin如何与Jack一起工作的唯一方法是向Kotlin编译器添加一个Java后端,即生成Java代码的后端,如。在这种情况下,Kotlin编译器生成的代码可以像处理任何其他Java代码一样由Jack处理


但目前我们还不知道杰克在发布后会支持什么。也许会发生巨大的变化,为Jack添加Kotlin支持将成为可能。

谷歌不会将Jack作为默认工具,而是将Jack和Jill作为默认工具。

与Jill一起将.class文件编译为dex将继续下去。否则,您可以告别jar/aar库

杰克或吉尔是否会慢一点仍有待讨论。Android团队希望jack能够比当前的构建过程更快,但目前情况并非如此


此外,Jack和Dex是公开的,没有任何东西可以阻止kotlin团队从kotlin源代码中编写工具emit.Jack或.Dex文件。

免责声明:我在Jack上工作

这不会影响你。Kotlin的编译器生成Java 6字节码,Jack/Jill可以很好地导入这些字节码。

正如今天出现的博客帖子()所说:

目前有一些问题妨碍Jack正确处理Kotlin生成的字节码(和),但我们计划与Google团队合作,要么解决问题,要么为我们提供解决办法。完成后,我们将能够在增量编译期间使用Jill只翻译更改的类文件,而不是每次翻译所有类文件(这是旧Android工具中唯一可能的行为)


因此Kotlin最终会支持Jack&Jill并从中获益。

@Pavel Dudka

杰克是一个编译器。与javac类似,但它的功能略有不同:

如您所见,Jack将Java源代码直接编译成Dex文件!我们不再有中间的*.class文件,所以不需要dx工具

但是等等!如果我在项目中包含第三方库(作为.class文件的集合提供),该怎么办

那就是吉尔上场的时候:

Jill可以处理类文件并将其转换为特殊的Jayce格式,该格式可作为Jack编译器的输入

所以现在让我们暂时停下来想想。。。那些我们沉迷其中的酷插件会发生什么?它们都需要.class文件,而Jack编译器不再有这些文件了

幸运的是,Jack为我们提供了一些开箱即用的重要功能:

  • Retrolambda-不需要。杰克能很好地对付兰姆达斯
  • Proguard-它现在被烘焙到Jack中,所以您仍然可以使用模糊化和最小化
优势: Jack支持Java编程语言1.7,并集成了下面描述的其他功能

  • 提前退出

    生成JACK库文件时,将生成库的.dex,并将其作为预索引存储在.JACK库文件中。编译时,JACK重用每个库中的pre-dex。 所有图书馆都预先编制了索引

  • 增量编译

    增量编译意味着只重新编译自上次编译以来接触过的组件及其依赖项。当更改仅限于一组有限的组件时,增量编译可能比完整编译快得多

  • 重新包装

    JACK使用jarjar配置文件进行重新打包

  • 多索引支持

    由于dex文件仅限于65K个方法,因此超过65K个方法的应用程序必须拆分为多个