Байт-код Kotlin в приложениях для Android - PullRequest
0 голосов
/ 13 ноября 2018

Я разработчик kotlin и Java, и недавно я начал анализировать байт-код, сгенерированный kotlin. И я обнаружил много кода-обертки и других вещей, которые генерирует компилятор, чтобы перевести то, что я кодировал в Kotlin, в Java.

Итак, мой вопрос:

Представьте, что у меня есть приложение, код которого на 100% написан на kotlin. Зависимости и основное приложение. Весь котлин.

  1. Означает ли это, что будет использоваться другой компилятор, чтобы избежать Java-совместимого байт-кода?
  2. Или какая-либо оптимизация выполняется компилятором в подобных сценариях?

Большое спасибо.


Я знаю о Kotlin Native, но думаю, что в будущем он будет применяться только к Android.

1 Ответ

0 голосов
/ 13 ноября 2018

Единственный способ избежать байт-кода Java с Kotlin - это использовать Kotlin Native, и в этом случае вы не сможете использовать Android SDK.

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

Чтобы ответить на ваши вопросы:

  1. Нет, тот же компилятор используется независимо от того, есть ли у вас исходные файлы Java.
  2. Вероятно, нет.Kotlin JVM почти полностью совместима с Java, и это то же самое, независимо от того, включает ли ваш проект код Java.

Подумайте, создавали ли вы библиотеку Android в Kotlin.Вы действительно хотите, чтобы в этом случае он автоматически компилировался с чем-то иным, нежели байт-код Java?Его нельзя будет использовать в проектах Java, поскольку это побеждает одну из главных причин, по которой Kotlin так хорош в качестве альтернативы Java.

Также помните, что вы используете Android SDK.Даже если у вас нет зависимостей в вашем build.gradle, вы все равно ссылаетесь на основной SDK, который является Java.SDK не входит в ваш APK, но он все еще используется во время компиляции.

Если вы хотите что-то, что избегает байт-кода Java, используйте что-то вроде Flutter.Он имеет собственный SDK и может соединяться с компонентами Java.Конечно, вы не можете полностью избежать JVM, потому что вам все еще нужен какой-то способ для Android установить и открыть приложение.

...