У меня есть исходный файл Kotlin, но я хочу перевести его на Java.
Как я могу преобразовать Kotlin в исходный код Java?
У меня есть исходный файл Kotlin, но я хочу перевести его на Java.
Как я могу преобразовать Kotlin в исходный код Java?
Как сказал @Vadzim, в IntelliJ или Android Studio вам просто нужно сделать следующее, чтобы получить java-код из kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
Обновление:
В последней версии (1.2+) плагина Kotlin вы также можете напрямую делать Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
в настоящее время включен только для скомпилированных классов Kotlin.
- person Onik; 28.09.2018
Вы можете скомпилировать Kotlin в байт-код, а затем использовать дизассемблер Java.
Декомпиляция может выполняться внутри IntelliJ Idea или с помощью FernFlower https://github.com/fesh0r/fernflower. (спасибо @Jire)
Не было автоматизированного инструмента, как я проверил пару месяцев назад (и никаких планов на один AFAIK)
вы можете перейти в Инструменты> Kotlin> Показать байт-код kotlin
Чтобы преобразовать исходный файл
Kotlin
в исходный файлJava
, вам необходимо (в Android Studio):
Нажмите Cmd - Shift - A на Mac или нажмите Ctrl - Shift - A на машине Windows.
Введите действие, которое вы ищете: Kotlin Bytecode
и выберите Show Kotlin Bytecode
в меню.
Decompile
в верхней части панели Kotlin Bytecode
.Я компилирую 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);
}
}
Как упоминал @ louis-cad, «исходный код Kotlin -> байтовый код Java -> исходный код Java» - пока единственное решение.
Но я хотел бы упомянуть способ, который предпочитаю: с помощью декомпилятора Jadx для Android.
Он позволяет видеть генерируемый код для замыканий, и, как по мне, результирующий код «чище», чем код из декомпилятора IntelliJ IDEA.
Обычно, когда мне нужно увидеть исходный код Java любого класса Kotlin, я делаю:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
В этом графическом интерфейсе работают основные функции IDE: поиск классов, объявление щелчком мыши. и т.п.
Также весь исходный код можно было сохранить, а затем просмотреть с помощью других инструментов, таких как IntelliJ IDEA.
brew install jadx
- person milosmns; 15.09.2019
Java и Kotlin работают на виртуальной машине Java (JVM).
Преобразование файла Kotlin в файл Java включает два шага: компиляцию кода Kotlin в байт-код JVM и затем декомпилирование байт-кода в код Java.
Шаги по преобразованию исходного файла Kotlin в исходный файл Java:
Decompile Kotlin to Java
в настоящее время включен только для скомпилированных классов Kotlin. - person Onik   schedule 28.09.2018