Bir Kotlin kaynak dosyam var, ancak Java'ya çevirmek istiyorum.
Kotlin'i Java kaynağına nasıl dönüştürebilirim?
Bir Kotlin kaynak dosyam var, ancak Java'ya çevirmek istiyorum.
Kotlin'i Java kaynağına nasıl dönüştürebilirim?
Yanıtlar:
@Vadzim'in söylediği gibi, IntelliJ veya Android Studio'da java kodunu kotlin'den almak için aşağıdakileri yapmanız yeterlidir:
Menu > Tools > Kotlin > Show Kotlin Bytecode
Decompile
tıklayınGüncelleme:
Kotlin eklentisinin son sürümü (1.2+) ile de doğrudan yapabilirsiniz Menu > Tools > Kotlin -> Decompile Kotlin to Java
.
Decompile Kotlin to Java
şu anda yalnızca derlenmiş Kotlin sınıfları için etkindir .
Kotlin'i bayt kodlamak için derleyebilir, ardından bir Java sökücü kullanabilirsiniz.
Ayrıştırma IntelliJ Idea içinde veya FernFlower https://github.com/fesh0r/fernflower kullanılarak yapılabilir (teşekkürler @Jire)
Birkaç ay önce kontrol ettiğim hiçbir otomatik araç yoktu (ve bir AFAIK için plan yok)
Bir
Kotlin
kaynak dosyayı bir kaynak dosyaya dönüştürmekJava
için (Android Studio'da olduğunuzda):
Basın Cmd- Shift- ABir Mac veya basın Ctrl- Shift- AWindows makinesinde.
Aradığınız eylemi yazın: Kotlin Bytecode
ve menüden seçim yapın Show Kotlin Bytecode
.
Decompile
üst kısmındaki düğmesine basın Kotlin Bytecode
.Kotlin'i bayt koduna derledim ve sonra bunu Java'ya derledim. Kotlin derleyici ile derleme ve cfr ile derlemek .
Projem burada .
Bu, bunu derlememe izin veriyor:
package functionsiiiandiiilambdas.functions.p01tailiiirecursive
tailrec fun findFixPoint(x: Double = 1.0): Double =
if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
Buna:
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'in belirttiği gibi "Kotlin kaynağı -> Java bayt kodu -> Java kaynağı" şu ana kadar tek çözümdür.
Ama tercih ettiğim yoldan bahsetmek istiyorum: Android için Jadx decompiler kullanmak .
Kapaklar için kod üretir ve benim için sonuç kodu "temiz" sonra IntelliJ IDEA decompiler bir tane görmenizi sağlar .
Normalde yaptığım herhangi bir Kotlin sınıfının Java kaynak kodunu görmem gerektiğinde:
./gradlew assembleDebug
jadx-gui ./app/build/outputs/apk/debug/app-debug.apk
Bu GUI temel IDE işlevselliği çalışır: sınıf arama, bildirime gitmek için tıklatın. vb.
Ayrıca tüm kaynak kodu kaydedilebilir ve daha sonra IntelliJ IDEA gibi diğer araçlar kullanılarak görüntülenebilir.
brew install jadx
Java ve Kotlin, Java Sanal Makinesi (JVM) üzerinde çalışır.
Bir Kotlin dosyasını Java dosyasına dönüştürmek iki adımdan oluşur, yani Kotlin kodunu JVM bayt koduna derlemek ve sonra bayt kodunu Java koduna dönüştürmek.
Kotlin kaynak dosyanızı Java kaynak dosyasına dönüştürme adımları: