Saya memiliki file sumber Kotlin, tetapi saya ingin menerjemahkannya ke Java.
Bagaimana saya bisa mengonversi Kotlin ke sumber Java?
Saya memiliki file sumber Kotlin, tetapi saya ingin menerjemahkannya ke Java.
Bagaimana saya bisa mengonversi Kotlin ke sumber Java?
Jawaban:
Seperti yang dikatakan @Vadzim, di IntelliJ atau Android Studio, Anda hanya perlu melakukan yang berikut untuk mendapatkan kode java dari kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
tombolMemperbarui:
Dengan versi terbaru (1.2+) dari plugin Kotlin Anda juga dapat langsung melakukannya Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
saat ini diaktifkan hanya untuk kelas Kotlin yang dikompilasi .
Anda dapat mengkompilasi Kotlin ke bytecode, lalu menggunakan Java disassembler.
Dekompilasi dapat dilakukan di dalam IntelliJ Idea, atau menggunakan FernFlower https://github.com/fesh0r/fernflower (terima kasih @Jire)
Tidak ada alat otomatis ketika saya memeriksa beberapa bulan yang lalu (dan tidak ada rencana untuk satu AFAIK)
Untuk mengonversi
Kotlin
file sumber ke fileJava
sumber yang perlu (ketika Anda di Android Studio):
Tekan Cmd- Shift- Apada Mac, atau tekan Ctrl- Shift- Apada mesin Windows.
Ketikkan tindakan yang Anda cari: Kotlin Bytecode
dan pilih Show Kotlin Bytecode
dari menu.
Decompile
tombol di bagian atas Kotlin Bytecode
panel.Saya mengkompilasi Kotlin ke kode byte dan kemudian de-kompilasi itu ke Jawa. Saya kompilasi dengan kompiler Kotlin dan de-kompilasi dengan cfr .
Proyek saya ada di sini .
Ini memungkinkan saya untuk mengkompilasi ini:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Untuk ini:
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);
}
}
Seperti @ louis-cad menyebutkan "sumber Kotlin -> kode byte Java -> sumber Java" adalah satu-satunya solusi sejauh ini.
Tapi saya ingin menyebutkan caranya, yang saya sukai: menggunakan Jadx decompiler untuk Android .
Hal ini memungkinkan untuk melihat kode yang menghasilkan penutupan dan, bagi saya, kode yang dihasilkan adalah "bersih" kemudian satu dari dekompiler IntelliJ IDEA.
Biasanya ketika saya perlu melihat kode sumber Java dari setiap kelas Kotlin yang saya lakukan:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
Dalam fungsi IDE dasar GUI ini berfungsi: pencarian kelas, klik untuk pergi deklarasi. dll.
Juga semua kode sumber dapat disimpan dan kemudian dilihat menggunakan alat lain seperti IntelliJ IDEA.
brew install jadx
Java dan Kotlin berjalan pada Java Virtual Machine (JVM).
Mengubah file Kotlin ke file Java melibatkan dua langkah yaitu mengkompilasi kode Kotlin ke bytecode JVM dan kemudian mendekompilasi bytecode ke kode Java.
Langkah-langkah untuk mengonversi file sumber Kotlin Anda ke file sumber Java: