更新3。 KOTLIN是NOW OFFICIALLY SUPPORTED FOR ANDROID DEVELOPMENT。通过GOOGLE。 YAAAAAAAAS!
更新2 :看起来像JetBrains is really committed to supporting Kotlin for Android in the long run。我是一个快乐的kotlin用户:)。
更新:来自JetBrains的Hadi Hariri mentioned they're going to release some info on this topic。我会在发布后更新这篇文章。
===下一个被弃用的东西===
谷歌刚刚发布了即将推出的Android N的预览版,其中包含一些有趣的功能,其中最引人注目的是部分Java 8 language support。这可能是由于Google正在研究新的Jack toolchain。
使用 javac 或 kotlinc 的当前工具链:
javac (.java
- > .class
) - > dx (.class
- > .dex
)
kotlinc (.kt
- > .class
) - > dx (.class
- > .dex
)
新杰克工具链:
杰克(.java
- > .jack
- > .dex
)
我假设Google将推动 Jack 成为Android开发的默认工具链。 更新:杰克现在是deprecated。亚斯。
我的问题是这个新工具链将来会如何影响我作为Android开发的 kotlin 用户?我会“陷入困境”吗?
答案 0 :(得分:62)
免责声明:我在杰克工作
这不会影响你。 Kotlin的编译器生成Java 6字节码,Jack / Jill可以很好地导入它。
答案 1 :(得分:15)
@Pavel Dudka
杰克 - 是一个编译器。与javac类似,但它的确略有不同:正如您所看到的,Jack将Java源代码直接编译为Dex文件!我们不再有中间* .class文件了,所以不需要dx工具!
但是等等!如果我在项目中包含第三方库(作为.class文件的集合)会怎样?
这就是吉尔进场的时候:
Jill可以处理类文件并将它们转换为特殊的Jayce格式,可以用作Jack编译器的输入。
所以现在让我们暂时停下来思考......我们上瘾的所有酷插件会发生什么?他们都需要.class文件,杰克编译器不再有那些......
幸运的是,杰克提供了一些对我们开箱即用的重要功能:
Jack支持Java编程语言1.7并集成了下面描述的其他功能。
<强> Predexing 强>
生成JACK库文件时,会生成库的.dex并将其作为pre-dex存储在.jack库文件中。编译时,JACK重用每个库中的pre-dex。 所有图书馆都是预先设定的。
增量编译
增量编译意味着只重新编译自上次编译以来触及的组件及其依赖项。当更改仅限于一组有限的组件时,增量编译可能比完整编译快得多。
<强>重新包装强>
JACK使用jarjar配置文件进行重新打包。
Multidex支持
由于dex文件限制为65K方法,因此必须将具有65K以上方法的应用程序拆分为多个dex文件。 (有关multidex的详细信息,请参阅“使用超过65K方法构建应用程序”。)
答案 2 :(得分:7)
更新(03/16/2017)
幸运的是,杰克已经死了,因此不会影响科特林开发商。
如果杰克是未来,那么你将会被Kotlin困在过去。目前,Jack不支持可以将非Java源代码编译为Dalvik字节码的插件。即使它确实如此,JetBrains也需要为Kotlin编译器添加一个新的后端,这不是一项微不足道的任务。所以你必须使用Killlin和Jill,它将与你现在使用的工具链非常相似。
正如您在下图中所见,即使不能明确关闭Jack,您仍然可以将项目转换为库项目以使用Jill。应用程序项目将仅引用此库项目。
我看到Kotlin如何与Jack一起工作的唯一方法就是向Kotlin编译器添加一个Java后端,即后端生成像Xtend这样的Java代码。在这种情况下,Kotlin编译器生成的代码可以像任何其他Java代码一样由Jack处理。
但目前我们还不知道杰克在发布时会支持什么。也许某些事情会发生巨大变化,并且可以为杰克增加Kotlin支持。
答案 3 :(得分:7)
Google不会将Jack作为默认工具,而是Jack and Jill
使用Jill将.class文件编译为dex就可以了。否则,你可以告诉jar / aar库。
Jack或Jill是否会变慢仍然需要辩论。 Android团队希望jack会比当前的构建过程更快,但现在情况并非如此
此外,Jack和Dex可以公开使用,没有什么能阻止kotlin团队编写从kotlin源代码发出.jack或.dex文件的工具。
答案 4 :(得分:5)
正如今天出现的博客文章(Kotlin's Android Roadmap)所述:
现在有一些问题阻止Jack正确处理Kotlin生成的字节码(196084和203531),但我们计划与Google团队合作解决问题或提供我们方面的解决方法。完成后,我们将能够在增量编译期间仅使用Jill 转换已更改的类文件,而不是每次都转换所有类文件(这是旧Android工具中唯一可能的行为) )。
所以Kotlin最终会支持Jack&amp;吉尔并从中受益。
答案 5 :(得分:2)
根据最新的谷歌公告 -
我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作。展望未来,Android构建系统将本身支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定。
我们最初测试通过Jack工具链添加Java 8支持。随着时间的推移,当我们考虑注释处理器,字节码分析器和重写器受到影响时,我们意识到切换到Jack的成本对于我们的社区来说太高了。感谢您尝试Jack工具链并给予我们很好的反馈。您可以继续使用Jack构建Java 8代码,直到我们发布新的支持。从杰克迁移应该很少或根本不需要工作。
所以我们不必担心杰克工具链成为Android开发的默认工具链。您可以继续使用kotlin或使用普通的javac / dx工具集。
答案 6 :(得分:1)
我已经从Kotlin官方博客上发现了这篇博文:Kotlin’s Android Roadmap
在那里你会找到一个告诉我们的部分:
我们计划做的下一件事是提高Android构建性能 提供与Android新Jack and Jill toolchain的集成。 现在有一些问题阻止杰克处理 Kotlin生成的字节码正确(196084和203531),但我们计划 与Google团队合作解决问题或 提供我们方面的解决方法。一旦完成,我们将能够 在增量期间仅使用Jill翻译已更改的类文件 编译,而不是每次都翻译所有类文件 (这是旧Android工具中唯一可能的行为)。
正如@LukasBergstrom所说,过去并没有出现任何问题&#34; ; - )
您还可以查看与此主题相关的Reddit
讨论:What is the status of Kotlin with Jack and Jill?
快乐的编码。
答案 7 :(得分:0)
根据Kotlin blog,发布1.1-beta2新功能部分:
支持在启用Jack工具链时构建Android项目(jackOptions {true});