前言
在使用kotlin的过程中,很好奇kotlin是如何能够做到完全兼容java,如何在最后打包进入到dex中。显而易见的,kotlin在编译时最后阶段会产生java字节码,最后通过dx 生成 dex打包进到apk里,不过很好奇中间经过了哪些处理?又有哪些特殊之处?
这里大致可以看到java整个的编译流程。
kotlin 也是类似的过程。
Kotlin编译器在编译前端(即词法分析、语法分析、语义分析、中间代码生成)并没有做让人感到惊讶的事情,和Java是基本一致的。与Java相比,所与众不同,也最重要的细节在编译后端(目标代码生成)环节。Kotlin编译器在目标代码生成环节做了很多类似于Java封装的事情,比如自动生成Getter/Setter代码的生成、Companion转变成静态类、修改类属性为final不可继承等等工作。可以说,大部分Kotlin的特性都在这个环节处理产生。可以这么说,Kotlin将我们本来在代码层做的一些封装工作转移到了编译后端阶段,以使得我们可以更加简洁的使用Kotlin语言。