Eu tenho um arquivo de origem Kotlin, mas quero traduzi-lo para Java.
Como posso converter Kotlin para fonte Java?
Eu tenho um arquivo de origem Kotlin, mas quero traduzi-lo para Java.
Como posso converter Kotlin para fonte Java?
Respostas:
Como o @Vadzim disse, no IntelliJ ou no Android Studio, basta fazer o seguinte para obter o código java do kotlin:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
botãoAtualizar:
Com uma versão recente (1.2+) do plug-in Kotlin, você também pode fazer diretamente Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
atualmente está ativado apenas para as classes Kotlin compiladas .
Você pode compilar o Kotlin no bytecode e depois usar um desmontador de Java.
A descompilação pode ser feita dentro do IntelliJ Idea ou usando o FernFlower https://github.com/fesh0r/fernflower (obrigado @Jire)
Não havia ferramenta automatizada, como verifiquei há alguns meses (e não há planos para um AFAIK)
Para converter um
Kotlin
arquivo de origem em umJava
arquivo de origem, você precisa (quando estiver no Android Studio):
Pressione Cmd- Shift- Aem um Mac ou Ctrl- Shift- Aem uma máquina Windows.
Digite a ação que você está procurando: Kotlin Bytecode
e escolha Show Kotlin Bytecode
no menu.
Decompile
botão na parte superior do Kotlin Bytecode
painel.Compilei o Kotlin para código de bytes e depois o descompile para Java. Eu compilar com o compilador Kotlin e descompilar com cfr .
Meu projeto está aqui .
Isso me permite compilar isso:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Para isso:
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);
}
}
Como @ louis-cad mencionou "Fonte Kotlin -> código de bytes do Java -> fonte Java" é a única solução até agora.
Mas eu gostaria de mencionar o caminho, que eu prefiro: usando o descompilador Jadx para Android .
Ele permite ver o código gerado para os fechamentos e, quanto a mim, o código resultante é "mais limpo" do que o do descompilador IntelliJ IDEA.
Normalmente, quando preciso ver o código-fonte Java de qualquer classe Kotlin que faço:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
Nesta GUI, a funcionalidade básica do IDE funciona: pesquisa de classe, clique para ir para a declaração. etc.
Além disso, todo o código-fonte pode ser salvo e visualizado usando outras ferramentas como o IntelliJ IDEA.
brew install jadx
Java e Kotlin são executados na Java Virtual Machine (JVM).
Converter um arquivo Kotlin em arquivo Java envolve duas etapas, ou seja, compilar o código Kotlin no bytecode da JVM e, em seguida, descompilar o bytecode no código Java.
Etapas para converter seu arquivo de origem Kotlin em arquivo de origem Java: