Ho un file sorgente di Kotlin, ma voglio tradurlo in Java.
Come posso convertire Kotlin in sorgente Java?
Ho un file sorgente di Kotlin, ma voglio tradurlo in Java.
Come posso convertire Kotlin in sorgente Java?
Risposte:
Come ha detto @Vadzim, in IntelliJ o Android Studio, devi solo fare quanto segue per ottenere il codice java da kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
pulsanteAggiornare:
Con una versione recente (1.2+) del plugin Kotlin puoi anche farlo direttamente Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
attualmente è abilitato solo per le classi Kotlin compilate .
Puoi compilare Kotlin in bytecode, quindi utilizzare un disassemblatore Java.
La decompilazione può essere eseguita all'interno di IntelliJ Idea o utilizzando FernFlower https://github.com/fesh0r/fernflower (grazie @Jire)
Non c'erano strumenti automatici come ho verificato un paio di mesi fa (e non ci sono piani per un AFAIK)
Per convertire un
Kotlin
file sorgente in unJava
file sorgente necessario (quando si è in Android Studio):
Premere Cmd- Shift- Asu un Mac o premere Ctrl- Shift- Asu un computer Windows.
Digita l'azione che stai cercando: Kotlin Bytecode
e scegli Show Kotlin Bytecode
dal menu.
Decompile
pulsante nella parte superiore del Kotlin Bytecode
pannello.Compilo Kotlin in codice byte e poi decompilalo in Java. Compilare con il compilatore Kotlin e decompilare con cfr .
Il mio progetto è qui .
Questo mi permette di compilare questo:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
A questo:
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);
}
}
Come ha menzionato @ louis-cad "Fonte Kotlin -> Codice byte Java -> Fonte Java" è l'unica soluzione finora.
Ma vorrei menzionare il modo in cui preferisco: usare il decompilatore Jadx per Android .
Permette di vedere il codice generato per le chiusure e, per quanto mi riguarda, il codice risultante è "più pulito" di quello del decompilatore IDEA di IntelliJ.
Normalmente quando ho bisogno di vedere il codice sorgente Java di qualsiasi classe Kotlin lo faccio:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
In questa GUI la funzionalità IDE di base funziona: ricerca per classe, fare clic per andare alla dichiarazione. eccetera.
Inoltre, è possibile salvare e visualizzare tutto il codice sorgente utilizzando altri strumenti come IntelliJ IDEA.
brew install jadx
Java e Kotlin vengono eseguiti su Java Virtual Machine (JVM).
La conversione di un file Kotlin in file Java comporta due passaggi, ovvero la compilazione del codice Kotlin nel bytecode JVM e quindi la decompilazione del bytecode nel codice Java.
I passaggi per convertire il file sorgente Kotlin in file sorgente Java: