У меня есть исходный файл 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 .
Вы можете скомпилировать Kotlin в байт-код, а затем использовать дизассемблер Java.
Декомпиляция может быть выполнена внутри IntelliJ Idea или с помощью FernFlower https://github.com/fesh0r/fernflower (спасибо @Jire)
Не было никакого автоматизированного инструмента, поскольку я проверил пару месяцев назад (и никаких планов относительно одного AFAIK)
Чтобы преобразовать
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
Java и Kotlin работают на виртуальной машине Java (JVM).
Преобразование файла Kotlin в файл Java включает в себя два этапа: компиляцию кода Kotlin в байт-код JVM, а затем декомпиляцию байт-кода в код Java.
Шаги для преобразования вашего исходного файла Kotlin в исходный файл Java: