Comment convertir un fichier source Kotlin en un fichier source Java


389

J'ai un fichier source Kotlin, mais je veux le traduire en Java.

Comment convertir Kotlin en source Java?


10
Je suis à peu près sûr qu'aucun outil automatisé n'a encore été construit pour cela. Vous pouvez le construire d'abord!
Eric Cochran

7
Il est très probable que vous vous retrouviez avec une classe Java laide et non maintenable qui ne fonctionnera pas si vous n'avez pas la bibliothèque standard Kotlin dans le chemin de classe. À quoi ça sert?
yole

3
Considérez le traducteur j2objC. Ce serait génial si vous pouviez faire kotlin -> Java -> objC
Patrick

3
Le bouton "Décompiler" a pour objectif d'aider les utilisateurs à comprendre le fonctionnement de la compilation Kotlin. Le code Java qu'il génère n'est pas destiné à être utilisé comme code de production réel (et est tout à fait mal adapté pour cela - pour commencer, il ne compile pas toujours ...)
yole

2
@yole que diriez-vous de quelqu'un qui ne connaît pas Kotlin ou qui n'a pas le temps de l'apprendre et qui a un exemple de code dans ce langage qui a certaines fonctionnalités dont il a besoin pour comprendre pour faire fonctionner son code Java?
Michael

Réponses:


400

Comme l'a dit @Vadzim, dans IntelliJ ou Android Studio, il vous suffit de faire ce qui suit pour obtenir le code java de kotlin:

  1. Menu > Tools > Kotlin > Show Kotlin Bytecode
  2. Cliquez sur le Decompilebouton
  3. Copiez le code java

Mise à jour:

Avec une version récente (1.2+) du plugin Kotlin, vous pouvez également le faire directement Menu > Tools > Kotlin -> Decompile Kotlin to Java.


60
La sortie Java n'est-elle pas moche?
Pacerier

20
@Pacerier Tout comme la plupart des sorties de décompilation, c'est bien sûr
Louis CAD

5
converti de kotlin en java. Mais il montre du code supplémentaire. le code que je n'ai même jamais écrit ou entendu
Nauman Ash

20
cette option n'est pas activée, elle est de couleur grise. Comment puis-je l'activer.
Vikas Pandey

8
@VikasPandey, Decompile Kotlin to Javan'est actuellement activé que pour les classes Kotlin compilées .
2018

39

Vous pouvez compiler Kotlin en bytecode, puis utiliser un désassembleur Java.

La décompilation peut être effectuée dans IntelliJ Idea, ou en utilisant FernFlower https://github.com/fesh0r/fernflower (merci @Jire)

Il n'y avait pas d'outil automatisé car j'ai vérifié il y a quelques mois (et aucun plan pour un AFAIK)


2
En guise de remarque, sachez que les génériques dans le code généré peuvent provoquer des avertissements du compilateur, car Kotlin autorise certaines choses que le compilateur java n'autorise pas. Cela fonctionne toujours en code octet.
Jacob Zimmerman

@voddan Je pense qu'il fait référence aux génériques réifiés, qui ne sont pas possibles en Java pur.
Jire

1
Les génériques @Jire réifiés sont toujours en ligne, donc à partir de Java, ils ressemblent à des références de classe normales
voddan


4
IntelliJ IDEA 2016.2: Menu / Tools / Kotlin / Show Kotlin Bytecode, puis cliquez sur le bouton Decompile
Vadzim


7

Pour convertir un Kotlinfichier source en fichier Javasource, vous devez (lorsque vous dans Android Studio):

  1. Appuyez sur Cmd- Shift- Asur un Mac, ou appuyez sur Ctrl- Shift- Asur une machine Windows.

  2. Tapez l'action que vous recherchez: Kotlin Bytecodeet choisissez Show Kotlin Bytecodedans le menu.

entrez la description de l'image ici

  1. Appuyez Decompilesur le bouton en haut du Kotlin Bytecodepanneau.

entrez la description de l'image ici

  1. Vous obtenez maintenant un fichier Java décompilé avec un fichier Kotlin dans un onglet adjacent:

entrez la description de l'image ici


1
Merci Monsieur! Ce buggy AS a de nouveau changé les outils normaux (Outils> Kotlin> ...).
CoolMind

5

Je compile Kotlin en code octet puis décompile cela en Java. Je compile avec le compilateur Kotlin et décompile avec cfr .

Mon projet est ici .

Cela me permet de compiler ceci:

package functionsiiiandiiilambdas.functions.p01tailiiirecursive

tailrec fun findFixPoint(x: Double = 1.0): Double =
        if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))

Pour ça:

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

4

Comme @ louis-cad l'a mentionné, "la source Kotlin -> le code d'octet Java -> la source Java" est la seule solution à ce jour.

Mais je voudrais mentionner la voie que je préfère: utiliser le décompilateur Jadx pour Android .

Il permet de voir le code généré pour les fermetures et, comme pour moi, le code résultant est "plus propre" que celui du décompilateur IntelliJ IDEA.

Normalement, quand j'ai besoin de voir le code source Java de n'importe quelle classe Kotlin, je le fais:

  • Générez apk: ./gradlew assembleDebug
  • Ouvrez apk en utilisant l'interface graphique de Jadx: jadx-gui ./app/build/outputs/apk/debug/app-debug.apk

Dans cette interface graphique de base, la fonctionnalité IDE fonctionne: recherche de classe, déclaration click to go. etc.

De plus, tout le code source pourrait être enregistré puis visualisé à l'aide d'autres outils comme IntelliJ IDEA.


Bon, il est disponible via Homebrew:brew install jadx
milosmns

2
  1. ouvrir le fichier kotlin dans le studio android
  2. allez dans outils -> kotlin -> kotlin bytecode
  3. dans la nouvelle fenêtre qui s'ouvre à côté de votre fichier kotlin, cliquez sur le bouton de décompilation. il créera l'équivalent java de votre fichier kotlin.

2

Java et Kotlin s'exécutent sur Java Virtual Machine (JVM).

La conversion d'un fichier Kotlin en fichier Java implique deux étapes, à savoir la compilation du code Kotlin en bytecode JVM puis décompiler le bytecode en code Java.

Étapes pour convertir votre fichier source Kotlin en fichier source Java:

  1. Ouvrez votre projet Kotlin dans Android Studio.
  2. Naviguez ensuite vers Outils -> Kotlin -> Afficher le bytecode Kotlin.

entrez la description de l'image ici

  1. Vous obtiendrez le bytecode de votre fichier Kotin.
  2. Maintenant, cliquez sur le bouton Décompiler pour obtenir votre code Java à partir du bytecode
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.