Ich habe eine Kotlin-Quelldatei, möchte diese aber nach Java übersetzen.
Wie kann ich Kotlin in eine Java-Quelle konvertieren?
Ich habe eine Kotlin-Quelldatei, möchte diese aber nach Java übersetzen.
Wie kann ich Kotlin in eine Java-Quelle konvertieren?
Antworten:
Wie @Vadzim sagte, müssen Sie in IntelliJ oder Android Studio nur Folgendes tun, um Java-Code von kotlin zu erhalten:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
SchaltflächeAktualisieren:
Mit einer aktuellen Version (1.2+) des Kotlin-Plugins können Sie dies auch direkt tun Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
ist derzeit nur für kompilierte Kotlin-Klassen aktiviert .
Sie können Kotlin zu Bytecode kompilieren und dann einen Java-Disassembler verwenden.
Die Dekompilierung kann in IntelliJ Idea oder mithilfe von FernFlower https://github.com/fesh0r/fernflower erfolgen (danke @Jire).
Es gab kein automatisiertes Tool, wie ich vor ein paar Monaten überprüft habe (und keine Pläne für eine AFAIK)
Um eine
Kotlin
Quelldatei in eineJava
Quelldatei zu konvertieren , müssen Sie (wenn Sie in Android Studio sind):
Presse Cmd- Shift- Aauf einem Mac oder drücken Ctrl- Shift- Aauf einem Windows - Rechner.
Geben Sie die gewünschte Aktion ein: Kotlin Bytecode
und wählen Sie Show Kotlin Bytecode
aus dem Menü.
Decompile
Taste oben im Kotlin Bytecode
Bedienfeld.Ich kompiliere Kotlin zu Bytecode und dekompiliere diesen dann zu Java. Ich kompiliere mit dem Kotlin-Compiler und dekompiliere mit cfr .
Mein Projekt ist hier .
Dies ermöglicht mir Folgendes zu kompilieren:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Dazu:
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);
}
}
Wie @ louis-cad erwähnte, ist "Kotlin-Quelle -> Javas Bytecode -> Java-Quelle" die einzige Lösung, die es bisher gab.
Aber ich möchte den Weg erwähnen, den ich bevorzuge: Jadx Decompiler für Android verwenden .
Es ermöglicht das Anzeigen des generierten Codes für Schließungen, und für mich ist der resultierende Code "sauberer" als einer vom IntelliJ IDEA-Dekompiler.
Normalerweise mache ich Folgendes, wenn ich Java-Quellcode einer Kotlin-Klasse sehen muss:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
In dieser GUI funktioniert die grundlegende IDE-Funktionalität: Klassensuche, Click-to-Go-Deklaration. usw.
Außerdem könnte der gesamte Quellcode gespeichert und dann mit anderen Tools wie IntelliJ IDEA angezeigt werden.
brew install jadx
Java und Kotlin laufen auf Java Virtual Machine (JVM).
Das Konvertieren einer Kotlin-Datei in eine Java-Datei umfasst zwei Schritte: Kompilieren des Kotlin-Codes in den JVM-Bytecode und anschließendes Dekompilieren des Bytecodes in den Java-Code.
Schritte zum Konvertieren Ihrer Kotlin-Quelldatei in eine Java-Quelldatei: