繁体   English   中英

如何将 Kotlin 源文件转换为 Java 源文件

[英]How to convert a Kotlin source file to a Java source file

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

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

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

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

更新:

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

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

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

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

您可以转到工具 > Kotlin > 显示 kotlin 字节码

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

要将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 文件:

在此处输入图片说明

我将 Kotlin 编译为字节码,然后将其反编译为 Java。 我用 Kotlin 编译器编译,用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 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 等其他工具查看。

  1. 在android studio中打开kotlin文件
  2. 转到工具 -> kotlin -> kotlin 字节码
  3. 在 kotlin 文件旁边打开的新窗口中,单击反编译按钮。 它将创建相当于您的 kotlin 文件的 java。

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

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

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

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

在此处输入图片说明

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

我不敢相信没有人提到本地历史记录 :默认情况下,IDEA将保留文件更改历史记录。

在将文件转换为Kotlin之前,要完全恢复文件的样子,请执行以下操作:

对于您要还原的每个文件:

  • 打开查找动作(在Mac上为Command-Shift-A)
  • 搜索“本地历史”
  • 按Enter键两次(一次在搜索结果中接受“本地历史记录”,然后再一次在“本地历史记录”菜单中选择“显示历史记录”)
  • 在左侧列表中找到“将文件从Java转换为Kotlin”
  • 右键单击它,然后选择“还原”

如果您几个月前就这样做了(因为本地历史记录不是VCS),那么这可能就行不通了,例如,它不能重新创建您使用Kotlin添加的任何方法,但是对我有用。

我有一个Kotlin源文件,但是我想将其转换为Java。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM