web-dev-qa-db-ja.com

KotlinのソースファイルをJavaのソースファイルに変換する方法

Kotlinのソースファイルがありますが、それをJavaに翻訳したいのです。

KotlinをJavaソースに変換する方法

290
activedecay

IntelliVまたはAndroid Studioで@Vadzimが言ったように、kotlinからJavaコードを取得するには次のようにするだけです。

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. Decompileボタンをクリック
  3. Javaコードをコピーする

更新:

Kotlinプラグインの最新バージョン(1.2以降)では、直接Menu > Tools > Kotlin -> Decompile Kotlin to Javaを実行することもできます。

300
Louis CAD

Kotlinをバイトコードにコンパイルしてから、Java逆アセンブラを使用することができます。

逆コンパイルはIntelliJ Ideaの内部で、あるいはFernFlower https://github.com/fesh0r/fernflowerを使用して (ありがとう@Jire)

私が数ヶ月前にチェックしたように自動化されたツールはありませんでした(そして1つのAFAIKの計画はありませんでした)

36
voddan

ツール> Kotlin> kotlinバイトコードの表示 に移動します。

enter image description here

enter image description here

enter image description here

15
Rasoul Miri

@ louis-cadが述べたように、 "Kotlinのソース - > Javaのバイトコード - > Javaのソース"はこれまでのところ唯一の解決策です。

しかし、私は私が好む方法について言及したいと思います: Android用Jadxデコンパイラを使用します

それは closures のための生成コードを見ることを可能にします、そして、私に関しては、結果コードは "よりきれい"で、それからIntelliJ IDEA逆コンパイラからのものです。

通常、KotlinクラスのJavaソースコードを見る必要があるときは、

  • Apkを生成します:./gradlew assembleDebug
  • Jadx GUIを使ってapkを開く:jadx-gui ./app/build/outputs/apk/debug/app-debug.apk

このGUIでは基本的なIDE機能が動作します:クラス検索、宣言をクリックしてください。等.

また、すべてのソースコードを保存してから、IntelliJ IDEAなどの他のツールを使用して表示することもできます。

3
Alex

KotlinソースファイルをJavaソースファイルに変換するには、次の手順を実行する必要があります(Android Studioの場合)。

  1. 押す Cmd - Shift - A Macでは、またはを押します。 Ctrl - Shift - A Windowsマシンで。 enter image description here

  2. 探しているアクションをKotlin Bytecodeと入力して、メニューからShow Kotlin Bytecodeを選択します。

enter image description here

  1. Kotlin Bytecodeパネルの上部にあるDecompileボタンを押します。

enter image description here

  1. 隣接するタブにKotlinファイルと一緒にDecompiled Javaファイルが表示されます。

enter image description here

お役に立てれば。

3
ARGeo
  1. androidスタジオでkotlinファイルを開く
  2. ツールに行く - > kotlin - > kotlinバイトコード
  3. kotlinファイルの横にある新しいウィンドウで、逆コンパイルボタンをクリックします。それはあなたのkotlinファイルと同等のJavaを作成するでしょう。
3
user8961393

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);
  }
}
3
Tomas Bjerre