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 BytecodeDecompiletı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
Kotlinkaynak dosyayı bir kaynak dosyaya dönüştürmekJavaiç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 Bytecodeve 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 assembleDebugjadx-gui ./app/build/outputs/apk/debug/app-debug.apkBu 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ı: