मेरे पास एक कोटलिन स्रोत फ़ाइल है, लेकिन मैं इसे जावा में अनुवाद करना चाहता हूं।
मैं कोटलिन को जावा स्रोत में कैसे बदल सकता हूं?
मेरे पास एक कोटलिन स्रोत फ़ाइल है, लेकिन मैं इसे जावा में अनुवाद करना चाहता हूं।
मैं कोटलिन को जावा स्रोत में कैसे बदल सकता हूं?
जवाबों:
जैसा @Vadzim ने कहा, इंटेलीज या एंड्रॉइड स्टूडियो में, आपको बस वोट कोड से जावा कोड प्राप्त करने के लिए निम्नलिखित करना होगा:
Menu > Tools > Kotlin > Show Kotlin BytecodeDecompileबटन पर क्लिक करेंअपडेट करें:
कोटलिन प्लगइन के हाल के संस्करण (1.2+) के साथ आप सीधे भी कर सकते हैं Menu > Tools > Kotlin -> Decompile Kotlin to Java।
Decompile Kotlin to Javaवर्तमान में केवल संकलित कोटलिन वर्गों के लिए सक्षम है ।
आप कोटलिन को बायटेकोड पर संकलित कर सकते हैं, फिर एक जावा डिस्सेम्बलर का उपयोग कर सकते हैं।
डिकंपाइलिंग इंटेलीज आइडिया के अंदर की जा सकती है, या फर्नाफ्लावर https://github.com/fesh0r/fernflower का उपयोग करके (धन्यवाद @Jire)
कोई स्वचालित उपकरण नहीं था जैसा कि मैंने कुछ महीने पहले (और एक AFAIK के लिए कोई योजना नहीं) चेक किया था
Kotlinस्रोत फ़ाइल को स्रोत फ़ाइल में परिवर्तित करने के लिए, जिसकीJavaआपको आवश्यकता होती है (जब आप Android स्टूडियो में होते हैं):
प्रेस Cmd- Shift- Aएक मैक पर, या प्रेस Ctrl- Shift- Aएक विंडोज मशीन पर।
वह क्रिया लिखें जिसे आप खोज रहे हैं: Kotlin Bytecodeऔर Show Kotlin Bytecodeमेनू से चुनें।
Decompileके शीर्ष पर बटन दबाएँ Kotlin Bytecode।मैं कोटलिन को बाइट कोड के लिए संकलित करता हूं और फिर जावा के लिए डी-संकलन करता हूं। मैं कोटलिन कम्पाइलर के साथ संकलन करता हूं और सीएफई के साथ डी-संकलन ।
मेरा प्रोजेक्ट यहां है ।
यह मुझे यह संकलन करने की अनुमति देता है:
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);
}
}
जैसा कि @ लूइस-कैड ने "कोटलिन स्रोत -> जावा के बाइट कोड -> जावा स्रोत" का अभी तक एकमात्र समाधान है।
लेकिन मैं उस तरीके का उल्लेख करना चाहूंगा, जिसे मैं पसंद करता हूं: एंड्रॉइड के लिए जेडएक्स डिकम्पॉइलर का उपयोग करना ।
यह क्लोजर के लिए जेनरेट कोड को देखने की अनुमति देता है और, मेरे लिए, परिणामस्वरूप कोड "क्लीनर" है, फिर इंटेलीज आईडीईए डिकम्पाइलर से एक है।
आम तौर पर जब मुझे किसी भी कोटलिन वर्ग के जावा स्रोत कोड को देखने की आवश्यकता होती है:
./gradlew assembleDebugjadx-gui ./app/build/outputs/apk/debug/app-debug.apkइस GUI में बुनियादी IDE कार्यक्षमता काम करती है: वर्ग खोज, घोषणा पर जाने के लिए क्लिक करें। आदि।
इसके अलावा सभी स्रोत कोड को बचाया जा सकता है और फिर IntelliJ IDEA जैसे अन्य टूल का उपयोग करके देखा जा सकता है।
brew install jadx
जावा और कोटलिन जावा वर्चुअल मशीन (JVM) पर चलता है।
कोटलिन फ़ाइल को जावा फ़ाइल में परिवर्तित करना दो चरणों को शामिल करता है अर्थात कोटलिन कोड को जेवीएम बायटेकोड पर संकलित करना और फिर जावा कोड के लिए बायटेकोड को अपघटित करना।
अपनी कोटलिन स्रोत फ़ाइल को जावा स्रोत फ़ाइल में बदलने के लिए चरण: