【问题标题】:How to convert a Kotlin source file to a Java source file如何将 Kotlin 源文件转换为 Java 源文件
【发布时间】:2016-04-29 16:28:21
【问题描述】:

我有一个 Kotlin 源文件,但我想将它翻译成 Java。

如何将 Kotlin 转换为 Java 源代码?

【问题讨论】:

  • 我很确定还没有为此构建自动化工具。您可以先构建它!
  • 如果类路径中没有 Kotlin 标准库,您很可能会得到一个丑陋且无法维护的 Java 类,该类将无法运行。有什么意义?
  • 考虑 j2objC 翻译器。如果你能做 kotlin -> Java -> objC 那就太好了
  • “反编译”按钮的目的是帮助人们了解 Kotlin 编译的工作原理。它生成的 Java 代码不打算用作实际的生产代码(并且非常不适合——首先,它并不总是编译...)
  • @yole 对于那些不了解 Kotlin 或有时间学习它并且拥有该语言的一些示例代码的人来说怎么样?

标签: java kotlin code-conversion


【解决方案1】:

要将Kotlin 源文件转换为Java 源文件,您需要(在Android Studio 中):

  1. 在 Mac 上按 Cmd-Shift-A, 或在 Windows 机器上按 Ctrl-Shift-A

  2. 键入您要查找的操作:Kotlin Bytecode 并从菜单中选择 Show Kotlin Bytecode

  1. Kotlin Bytecode 面板顶部的Decompile 按钮。

  1. 现在您会在相邻选项卡中获得反编译的 Java 文件和 Kotlin 文件:

【讨论】:

  • 谢谢您,先生!这个有问题的 AS 再次更改了普通工具(工具 > Kotlin > ...)。
【解决方案2】:

Java 和 Kotlin 在 Java 虚拟机 (JVM) 上运行。

将 Kotlin 文件转换为 Java 文件涉及两个步骤,即将 Kotlin 代码编译为 JVM 字节码,然后将字节码反编译为 Java 代码。

将 Kotlin 源文件转换为 Java 源文件的步骤:

  1. 在 Android Studio 中打开您的 Kotlin 项目。
  2. 然后导航到工具 -> Kotlin -> 显示 Kotlin 字节码。

  1. 您将获得 Kotin 文件的字节码。
  2. 现在单击反编译按钮从字节码中获取您的 Java 代码

【讨论】:

    【解决方案3】:

    您可以将 Kotlin 编译为字节码,然后使用 Java 反汇编程序。

    可以在 IntelliJ Idea 中进行反编译,也可以使用 FernFlower https://github.com/fesh0r/fernflower(感谢 @Jire)

    几个月前我检查过,没有自动化工具(也没有 AFAIK 的计划)

    【讨论】:

    • 附带说明,请注意生成代码中的泛型可能会导致编译器警告,因为 Kotlin 允许一些 java 编译器不允许的事情。不过,它仍然适用于字节码。
    • @voddan 我认为他指的是物化泛型,这在纯 Java 中是不可能的。
    • @Jire reified 泛型总是内联的,所以从 Java 来看它们看起来像普通的类引用
    • IntelliJ IDEA 2016.2: Menu / Tools / Kotlin / Show Kotlin Bytecode,然后点击反编译按钮
    【解决方案4】:

    你可以去Tools > Kotlin > Show kotlin bytecode

    【讨论】:

    【解决方案5】:

    我将 Kotlin 编译为字节码,然后将其反编译为 Java。我用 Kotlin 编译器编译,用 cfr 反编译。

    我的项目是here

    这允许我编译这个:

    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);
      }
    }
    

    【讨论】:

      【解决方案6】:

      正如@Vadzim 所说,在 IntelliJ 或 Android Studio 中,您只需执行以下操作即可从 kotlin 获取 java 代码:

      1. Menu > Tools > Kotlin > Show Kotlin Bytecode
      2. 点击Decompile按钮
      3. 复制java代码

      更新:

      使用最新版本 (1.2+) 的 Kotlin 插件,您也可以直接使用 Menu > Tools > Kotlin -> Decompile Kotlin to Java

      【讨论】:

      • Java输出不丑吗?
      • @Pacerier 就像大多数反编译输出一样,当然是
      • 从 kotlin 转换为 java。但它显示了额外的代码。我什至从未写过或听过的代码
      • 该选项未启用,它是灰色的。我如何启用它。
      • @VikasPandey,Decompile Kotlin to Java 目前仅对 compiled Kotlin classes 启用。
      【解决方案7】:
      1. 在 android studio 中打开 kotlin 文件
      2. 转到工具 -> kotlin ->kotlin 字节码
      3. 在您的 kotlin 文件旁边打开的新窗口中,单击反编译按钮。它将创建与您的 kotlin 文件等效的 java。

      【讨论】:

        【解决方案8】:

        正如@louis-cad 所说,“Kotlin 源代码 -> Java 的字节码 -> Java 源代码”是迄今为止唯一的解决方案。

        但我想提一下我更喜欢的方式:使用Jadx decompiler for Android

        它允许查看 闭包 的生成代码,而且对我而言,生成的代码比 IntelliJ IDEA 反编译器中的代码“更干净”。

        通常当我需要查看任何 Kotlin 类的 Java 源代码时:

        • 生成apk:./gradlew assembleDebug
        • 使用 Jadx GUI 打开 apk:jadx-gui ./app/build/outputs/apk/debug/app-debug.apk

        在这个 GUI 中,基本的 IDE 功能起作用:类搜索,点击去声明。等等

        还可以保存所有源代码,然后使用 IntelliJ IDEA 等其他工具查看。

        【讨论】:

        • 很好,可以通过 Homebrew 获得:brew install jadx
        猜你喜欢
        • 2016-04-07
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        相关资源
        最近更新 更多