ฉันมีไฟล์ต้นฉบับ Kotlin แต่ฉันต้องการแปลเป็น Java
ฉันจะแปลง Kotlin เป็นซอร์ส Java ได้อย่างไร
ฉันมีไฟล์ต้นฉบับ Kotlin แต่ฉันต้องการแปลเป็น Java
ฉันจะแปลง Kotlin เป็นซอร์ส Java ได้อย่างไร
คำตอบ:
ดังที่ @Vadzim กล่าวใน IntelliJ หรือ Android Studio คุณต้องทำสิ่งต่อไปนี้เพื่อรับรหัส java จาก kotlin:
Menu > Tools > Kotlin > Show Kotlin BytecodeDecompileปุ่มปรับปรุง:
กับรุ่นล่าสุด (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 assembleDebugjadx-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: