ฉันมีไฟล์ต้นฉบับ 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 เป็น bytecode จากนั้นใช้ Java disassembler
การคอมไพล์อาจทำได้ภายใน 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 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 Decompiler สำหรับ Android
จะช่วยให้เห็นการสร้างรหัสสำหรับการปิดและสำหรับฉันรหัสผลคือ "สะอาด" แล้วหนึ่งจาก IntelliJ IDEA decompiler
โดยปกติเมื่อฉันต้องการดูซอร์สโค้ด Java ของคลาส Kotlin ใด ๆ ที่ฉันทำ:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
ในฟังก์ชันการทำงานพื้นฐานของ GUI GUI นี้: การค้นหาชั้นเรียน, คลิกเพื่อไปยังการประกาศ เป็นต้น
นอกจากนี้ยังสามารถบันทึกรหัสต้นฉบับทั้งหมดแล้วดูด้วยเครื่องมืออื่น ๆ เช่น IntelliJ IDEA
brew install jadx
Java และ Kotlin ทำงานบน Java Virtual Machine (JVM)
การแปลงไฟล์ Kotlin ไปเป็นไฟล์ Java เกี่ยวข้องกับสองขั้นตอนคือการรวบรวมรหัส Kotlin เป็น JVM bytecode จากนั้นแยกส่วน bytecode เป็นรหัส Java
ขั้นตอนในการแปลงไฟล์ต้นฉบับ Kotlin ของคุณเป็นไฟล์ต้นฉบับ Java: