Kotlinソースファイルがありますが、それをJavaに変換したいと考えています。
KotlinをJavaソースに変換するにはどうすればよいですか?
Kotlinソースファイルがありますが、それをJavaに変換したいと考えています。
KotlinをJavaソースに変換するにはどうすればよいですか?
回答:
@Vadzimが言ったように、IntelliJまたはAndroid Studioでは、kotlinからJavaコードを取得するには、次の手順を実行するだけです。
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
、ボタン更新:
Kotlinプラグインの最新バージョン(1.2以降)では、直接実行することもできますMenu > Tools > Kotlin -> Decompile Kotlin to Java
。
Decompile Kotlin to Java
は現在、コンパイル済みのKotlinクラスでのみ有効です。
Kotlinをバイトコードにコンパイルしてから、Java逆アセンブラを使用できます。
逆コンパイルはIntelliJ Idea内で、またはFernFlowerを使用して行うことができますhttps://github.com/fesh0r/fernflower(thanks @Jire)
数か月前に確認したので自動化ツールはありませんでした(そして1つのAFAIKの計画はありませんでした)
ソースファイルを必要な
Kotlin
ソースファイルに変換するにはJava
(Android Studioの場合):
プレスCmd- Shift- Aマック、またはを押して上のCtrl- Shift- AWindowsマシン上で。
探しているアクションを入力し、メニューからKotlin Bytecode
選択Show Kotlin Bytecode
します。
Decompile
上部のボタンを押しますKotlin Bytecode
。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ソース」がこれまでの唯一のソリューションです。
しかし、私は、私が好む方法を述べたいと思います:Android向けのJadxデコンパイラーの使用。
これにより、クロージャーの生成コードを確認できます。また、私にとっては、生成されるコードはIntelliJ IDEAデコンパイラーのコードよりも「クリーン」です。
通常、私が行うKotlinクラスのJavaソースコードを表示する必要がある場合:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
このGUIでは、基本的なIDE機能が機能します。クラス検索、クリックして宣言に移動します。等
また、すべてのソースコードを保存して、IntelliJ IDEAなどの他のツールを使用して表示することもできます。
brew install jadx
JavaとKotlinは、Java仮想マシン(JVM)で実行されます。
KotlinファイルをJavaファイルに変換するには、KotlinコードをJVMバイトコードにコンパイルしてから、バイトコードをJavaコードに逆コンパイルするという2つのステップが必要です。
KotlinソースファイルをJavaソースファイルに変換する手順: