Как код Kotlin запускается в приложении для Android и как он отличается от Java?

Я изучаю Kotlin и хочу понять, как выполняется компилируемый код, и как он отличается от исполнения Java-кода с Android.

Я также хочу знать, почему мы пишем MainActivity::class.java ( class.java ) для ссылки на файл класса.

Спасибо!

как это отличается от выполнения Java-кода с Android?

Это не так. Android не выполняет код Java или код Kotlin. Вместо этого существует следующая цепочка:

  1. Java / Котлин / Scala / и т.д.. компилятор принимает код Java / Kotlin / Scala и испускает байт-код JVM в .class файлах.

  2. Плагин Android Gradle использует байт-код JVM, преобразует его в байт-код Dalvik (используя программу dx ) и упаковывает его в .apk .

  3. Когда файл .apk установлен на устройстве, ART конвертирует байт-код Dalvik, который он содержит в машинный код.

  4. Это тот машинный код (и / или Dalvik bytecode), который выполняется. ART не знает, какой исходный код языка находился на шаге 1, и ему все равно.

Я также хочу знать, почему мы пишем MainActivity :: class.java (class.java) для ссылки на файл класса.

Вы этого не сделаете. Вы пишете его для ссылки на объект Class соответствующий классу MainActivity .

В основном Kotlin скомпилирован с тем же байтовым кодом, что и Java.

Вы можете найти учебники Kotlin по всему Интернету. Но они никогда не очень объясняют генерируемый байт-код, отличный от «это jvm bytecode». Таким образом, можно было бы предположить, что нет большой разницы с Java-скомпилированным байт-кодом.

Я могу представить себе, что одно отличие состоит в том, что Kotlin дополняет созданный байт-код с аннотациями, чтобы включить специфические языковые функции Kotlin. Вероятно, это также причина того, что у Kotlin есть собственный тип KClass. Вероятно, он способен читать аннотации определенного класса kotlin. На самом деле существует 2 типа, которые представляют класс (KClass и Class). Экземпляр класса старой школы – это ссылка через class.java.

Также обратите внимание, что Kotlin может быть скомпилирован на другие языки, кроме байт-кода JVM. В этих других случаях не будет ссылки на класс, но все же ссылка KClass.

Хорошей отправной точкой для учебных пособий является https://kotlinlang.org