Как преобразовать исходный файл Kotlin в исходный файл Java

У меня есть исходный файл Kotlin, но я хочу перевести его на Java.

Как я могу преобразовать Kotlin в исходный код Java?


person activedecay    schedule 22.01.2016    source источник
comment
Я почти уверен, что для этого еще не создан автоматизированный инструмент. Вы можете сначала построить это!   -  person Eric Cochran    schedule 23.01.2016
comment
Очень вероятно, что вы получите уродливый и неподдерживаемый Java-класс, который не будет работать, если у вас нет стандартной библиотеки Kotlin в пути к классам. В чем смысл?   -  person yole    schedule 23.01.2016
comment
Рассмотрим переводчик j2objC. Было бы здорово, если бы вы могли сделать kotlin - ›Java -› objC   -  person Patrick    schedule 01.04.2016
comment
@Patrick Kotlin / Native теперь поддерживает взаимодействие с Objective-C и многоплатформенными проектами, так что вы можете поделиться кодом прямо сейчас;)   -  person Louis CAD    schedule 23.11.2017
comment
Цель кнопки «Декомпилировать» - помочь людям понять, как работает компиляция Kotlin. Генерируемый им Java-код не предназначен для использования в качестве реального производственного кода (и очень плохо подходит для этого - во-первых, он не всегда компилируется ...)   -  person yole    schedule 15.05.2018
comment
Decompile Kotlin to Java в настоящее время включен только для скомпилированных классов Kotlin.   -  person Onik    schedule 28.09.2018
comment
@yole, как насчет кого-то, кто не знает Kotlin или у него есть время изучить его и у которого есть образец кода на этом языке, который имеет некоторые функции, которые им необходимо понять, чтобы заставить их код Java работать?   -  person Michael    schedule 18.01.2019
comment
@Michael Как вы понимаете, цель команды Kotlin не в том, чтобы помочь людям избежать изучения Kotlin. Вы быстро научитесь понимать, что делает образец кода.   -  person yole    schedule 21.01.2019
comment
Мы должны преобразовать Kotlin в Java, чтобы читать журнал сбоев, см. Заголовок stackoverflow.com/questions/52969958/.   -  person CoolMind    schedule 27.06.2019


Ответы (8)


Как сказал @Vadzim, в IntelliJ или Android Studio вам просто нужно сделать следующее, чтобы получить java-код из kotlin:

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. Нажмите кнопку Decompile
  3. Скопируйте код Java

Обновление:

В последней версии (1.2+) плагина Kotlin вы также можете напрямую делать Menu > Tools > Kotlin -> Decompile Kotlin to Java.

person Louis CAD    schedule 23.11.2016
comment
Разве вывод Java не уродлив? - person Pacerier; 17.06.2017
comment
@Pacerier Как и большинство выходных данных декомпиляции, это, конечно, - person Louis CAD; 17.06.2017
comment
преобразован из kotlin в java. Но он показывает дополнительный код. код, который я даже никогда не писал и не слышал - person Nauman Ash; 20.07.2017
comment
@nauman Потому что вы написали код Kotlin, а не Java. Функции Kotlin полагаются на байт-код и не обязательно переводятся на Java, как вы ожидаете. Также есть дополнительные проверки, в первую очередь на допустимость значений NULL, и синтетические методы и поля. - person Louis CAD; 20.07.2017
comment
эта опция не включена, она окрашена в серый цвет. Как мне его включить. - person Vikas Pandey; 12.07.2018
comment
@VikasPandey, Decompile Kotlin to Java в настоящее время включен только для скомпилированных классов Kotlin. - person Onik; 28.09.2018

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

Декомпиляция может выполняться внутри IntelliJ Idea или с помощью FernFlower https://github.com/fesh0r/fernflower. (спасибо @Jire)

Не было автоматизированного инструмента, как я проверил пару месяцев назад (и никаких планов на один AFAIK)

person voddan    schedule 23.01.2016
comment
В качестве побочного примечания имейте в виду, что дженерики в сгенерированном коде могут вызывать предупреждения компилятора, поскольку Kotlin допускает некоторые вещи, которые компилятор java не делает. Однако он по-прежнему работает в байтовом коде. - person Jacob Zimmerman; 23.01.2016
comment
@voddan Я думаю, он имеет в виду овеществленные дженерики, которые невозможны в чистой Java. - person Jire; 24.01.2016
comment
Повторяемые дженерики @Jire всегда встроены, поэтому из Java они выглядят как обычные ссылки на классы - person voddan; 24.01.2016
comment
Это то, о чем я говорю <название href = "http://stackoverflow.com/questions/34762029/getting-incompatible-types-error-when-using-code-generated-from-a-kotlin-data" = "получение ошибки несовместимых типов при использовании кода, созданного из данных котлина"> stackoverflow.com/questions/34762029/ - person Jacob Zimmerman; 25.01.2016
comment
IntelliJ IDEA 2016.2: Меню / Инструменты / Kotlin / Показать байт-код Kotlin, затем нажмите кнопку «Декомпилировать». - person Vadzim; 23.07.2016

вы можете перейти в Инструменты> Kotlin> Показать байт-код kotlin

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

person Rasoul Miri    schedule 25.10.2018
comment
В настоящее время он отключен. Но вы можете использовать ответ @ARGeo (stackoverflow.com/a/54116131/2914140). - person CoolMind; 27.06.2019

Чтобы преобразовать исходный файл Kotlin в исходный файл Java, вам необходимо (в Android Studio):

  1. Нажмите Cmd - Shift - A на Mac или нажмите Ctrl - Shift - A на машине Windows.

  2. Введите действие, которое вы ищете: Kotlin Bytecode и выберите Show Kotlin Bytecode в меню.

введите описание изображения здесь

  1. Нажмите кнопку Decompile в верхней части панели Kotlin Bytecode.

введите описание изображения здесь

  1. Теперь вы получаете декомпилированный файл Java вместе с файлом Kotlin на соседней вкладке:

введите описание изображения здесь

person Andy Fedoroff    schedule 09.01.2019
comment
Спасибо, сэр! Эта глючная AS снова изменила обычные инструменты (Инструменты ›Kotlin› ...). - person CoolMind; 27.06.2019

Я компилирую Kotlin в байтовый код, а затем декомпилирую его в Java. Я компилирую с помощью компилятора Kotlin и декомпилирую с помощью cfr.

Мой проект находится здесь.

Это позволяет мне скомпилировать это:

package functionsiiiandiiilambdas.functions.p01tailiiirecursive

tailrec fun findFixPoint(x: Double = 1.0): Double =
        if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))

К этому:

package functionsiiiandiiilambdas.functions.p01tailiiirecursive;

public final class ExampleKt {
  public static final double findFixPoint(double x) {
    while (x != Math.cos(x)) {
      x = Math.cos(x);
    }
    return x;
  }

  public static /* bridge */ /* synthetic */ double findFixPoint$default(
      double d, int n, Object object) {
    if ((n & 1) != 0) {
      d = 1.0;
    }
    return ExampleKt.findFixPoint(d);
  }
}
person Tomas Bjerre    schedule 21.08.2018

Как упоминал @ louis-cad, «исходный код Kotlin -> байтовый код Java -> исходный код Java» - пока единственное решение.

Но я хотел бы упомянуть способ, который предпочитаю: с помощью декомпилятора Jadx для Android.

Он позволяет видеть генерируемый код для замыканий, и, как по мне, результирующий код «чище», чем код из декомпилятора IntelliJ IDEA.

Обычно, когда мне нужно увидеть исходный код Java любого класса Kotlin, я делаю:

  • Создать apk: ./gradlew assembleDebug
  • Откройте apk с помощью графического интерфейса Jadx: jadx-gui ./app/build/outputs/apk/debug/app-debug.apk

В этом графическом интерфейсе работают основные функции IDE: поиск классов, объявление щелчком мыши. и т.п.

Также весь исходный код можно было сохранить, а затем просмотреть с помощью других инструментов, таких как IntelliJ IDEA.

person Alex    schedule 11.04.2018
comment
Хороший, доступен через Homebrew: brew install jadx - person milosmns; 15.09.2019

  1. открыть файл котлина в студии Android
  2. перейдите в инструменты -> kotlin -> байт-код kotlin
  3. в новом окне, которое открывается рядом с вашим файлом kotlin, нажмите кнопку декомпилировать. он создаст Java-эквивалент вашего файла kotlin.
person Community    schedule 05.05.2018

Java и Kotlin работают на виртуальной машине Java (JVM).

Преобразование файла Kotlin в файл Java включает два шага: компиляцию кода Kotlin в байт-код JVM и затем декомпилирование байт-кода в код Java.

Шаги по преобразованию исходного файла Kotlin в исходный файл Java:

  1. Откройте свой проект Kotlin в Android Studio.
  2. Затем перейдите в Инструменты -> Kotlin -> Показать байт-код Kotlin.

введите здесь описание изображения

  1. Вы получите байт-код вашего файла Kotin.
  2. Теперь нажмите кнопку «Декомпилировать», чтобы получить код Java из байт-кода.
person Faxriddin Abdullayev    schedule 04.01.2020