Kotlin代码如何在Android应用程序中执行,与Java有什么不同?
我正在学习Kotlin,并希望了解编译后的代码是如何执行的,这与Java代码执行Android有什么不同。
我也想知道为什么我们编写MainActivity::class.java
( class.java
)来引用类文件。
谢谢!
与Android的Java代码执行有什么不同?
事实并非如此。 Android不执行Java代码或Kotlin代码。 相反,有以下链:
-
的Java /科特林/斯卡拉/等。 编译器使用Java / Kotlin / Scala代码并在
.class
文件中发出JVM字节码。 -
Android Gradle插件需要JVM字节码,将其转换为Dalvik字节码(使用
dx
程序)并将其打包到.apk
。 -
当
.apk
文件安装在设备上时, ART将其包含的Dalvik字节码转换为机器码。 -
这是执行的机器码(和/或Dalvik字节码)。 ART不知道在步骤1中哪个语言源代码在使用,并且不在意。
我也想知道为什么我们编写MainActivity :: class.java(class.java)来引用类文件。
你没有。 你写它来引用对应于MainActivity
类的Class
对象。
基本上Kotlin被编译成与Java相同的字节码。
你可以在网上findKotlin教程。 但是,除了’它是jvm字节码’之外,他们从来没有解释过生成的字节码。 所以可以想象,Java编译的字节码没有太大的区别。
我可以想象,一个不同之处在于,Kotlin使用注释来扩充生成的字节码,以便启用Kotlin特定的语言function。 这也可能是Kotlin拥有自己的KClasstypes的原因。 它可能能够阅读kotlin特定类的注释。 实际上有两种types代表一个类(KClass和Class)。 老派的Class类实例是通过class.java引用的。
另外请注意,Kotlin可以被编译为除JVM字节码以外的其他语言。 在其他情况下,将不会有Class引用,但仍然是KClass引用。
教程的一个很好的起点是https://kotlinlang.org