问题
**更新3.**KOTLIN ISNOW OFFICIALLY SUPPORTED FOR ANDROID DEVELOPMENT。通过GOOGLE。 YAAAAAAAAS!
更新2:看起来像JetBrains is really committed to supporting Kotlin for Android in the long run。我是一个快乐的kotlin用户:)。
更新:Hadi Hariri,来自JetBrains,mentioned they're going to release some info on this topic。一旦他们这样做,我会更新这篇文章。
===下一个被弃用的东西===
谷歌刚刚发布了即将推出的Android N的预览版,其中包含一些有趣的功能,其中最引人注目的是partialJava 8 language support。这是可能的,因为新的Jack toolchainGoogle正在努力。
目前的工具链使用javacorkotlinc:
javac(.java
- > .class
) - >dx(.class
- > .dex
)
kotlinc(.kt
- > .class
) - >dx(.class
- > .dex
)
新杰克工具链:
Jack(.java
- > .jack
- > .dex
)
我假设Google将推进制作Jack这是Android开发的默认工具链。更新:Jackis现在deprecated。亚斯。
我的问题是这个新的工具链将来会如何影响我,因为Android开发的用户是什么?我会"陷入困境"吗?
#1 热门回答(61 赞)
免责声明:我在杰克工作
这不会影响你。 Kotlin的编译器生成Java 6字节码,Jack / Jill可以很好地导入它。
#2 热门回答(15 赞)
@Pavel Dudka
杰克 - 是一个编译器。与javac类似,但它的确略有不同:
如你所见,Jack将Java源代码直接编译为Dex文件!我们不再有中间* .class文件了,所以不需要dx工具!
可是等等!如果我在项目中包含第三方库(作为.class文件的集合)会怎样?
这就是吉尔发挥作用的时候:
Jill可以处理类文件并将它们转换为特殊的Jayce格式,可以用作Jack编译器的输入。
所以现在让我们暂时搁置一下并思考......我们上瘾的所有酷插件会发生什么?他们都需要.class文件,杰克编译器不再有那些......
幸运的是,Jack提供了一些对我们开箱即用的重要功能:
- Retrolambda - 将不再需要。杰克可以妥善处理羔羊
- Proguard - 它现在被烘焙到Jack中,所以你仍然可以使用混淆和最小化
优点:
Jack支持Java编程语言1.7并集成了下面描述的其他功能。
- 预编制生成JACK库文件时,生成库的.dex并将其作为pre-dex存储在.jack库文件中。编译时,JACK会重用每个库中的pre-dex。所有库都是预先设定的。
- 增量编译增量编译意味着只重新编译自上次编译以来触及的组件及其依赖项。当更改仅限于一组有限的组件时,增量编译可能比完全编译快得多。
- 重新打包JACK使用jarjar配置文件进行重新打包。
- Multidex支持由于dex文件限制为65K方法,因此必须将具有65K以上方法的应用程序拆分为多个dex文件。 (有关multidex的更多信息,请参阅"使用超过65K方法构建应用程序"。)
##缺点:
- Jack不支持转换API - 没有可以修改的中间Java字节码,所以我在这里没有提到的一些插件将停止工作
- Jack目前不支持注释处理,因此如果你严重依赖Dagger,AutoValue等库,则在切换到Jack之前应该三思而后行。编辑:正如Jake Wharton所指出的,Jack in N Preview有注释处理支持,但它尚未通过Gradle公开。
- 不支持在Java字节码级别上运行的Lint检测器。
- Jacoco不受支持 - 好吧,我个人觉得Jacoco有问题(它并没有真正显示你想看的东西),所以可以完全没有它
- Dexguard - 目前不支持企业版Proguard
#3 热门回答(7 赞)
谷歌不打算将杰克作为默认工具,而是将Jack and Jill
推向市场。
使用Jill将.class文件编译为dex就可以了。否则,你可以告诉jar / aar库。
Jack或Jill是否会变慢仍然需要辩论。 Android团队希望jack会比当前的构建过程更快,但现在情况并非如此
此外,Jack和Dex在公开场合可用,没有什么能阻止kotlin团队编写从kotlin源代码发出.jack或.dex文件的工具。