আমার কাছে একটি কোটলিন উত্স ফাইল রয়েছে তবে আমি এটি জাভাতে অনুবাদ করতে চাই।
আমি কীভাবে কোটলিনকে জাভা উত্সে রূপান্তর করতে পারি?
আমার কাছে একটি কোটলিন উত্স ফাইল রয়েছে তবে আমি এটি জাভাতে অনুবাদ করতে চাই।
আমি কীভাবে কোটলিনকে জাভা উত্সে রূপান্তর করতে পারি?
উত্তর:
@ ভ্যাডজিম যেমন বলেছিলেন, ইন্টেলিজজে বা অ্যান্ড্রয়েড স্টুডিওতে কোটলিন থেকে জাভা কোড পেতে আপনাকে কেবল নিম্নলিখিতটি করতে হবে:
Menu > Tools > Kotlin > Show Kotlin BytecodeDecompileবাটনহালনাগাদ:
কোটলিন প্লাগইনের সাম্প্রতিক সংস্করণ (1.2+) এর সাহায্যে আপনি সরাসরিও করতে পারেন Menu > Tools > Kotlin -> Decompile Kotlin to Java।
Decompile Kotlin to Javaবর্তমানে কেবল সংকলিত কোটলিন ক্লাসের জন্যই সক্ষম রয়েছে ।
আপনি কোটলিনকে বাইটকোডে সংকলন করতে পারেন, তারপরে একটি জাভা ডিসেসেমব্লার ব্যবহার করুন।
পচনের কাজটি ইন্টেলিজ আইডিয়াতে বা ফার্নফ্লোয়ার https://github.com/fesh0r/fernflower (ধন্যবাদ @ জিরে) ব্যবহার করে করা যেতে পারে
কয়েক মাস আগে আমি পরীক্ষা করেছিলাম বলে কোনও স্বয়ংক্রিয় সরঞ্জাম ছিল না (এবং একটি আফ্রিকের জন্য কোনও পরিকল্পনা নেই)
একটি
Kotlinউত্স ফাইলকে উত্স ফাইলে রূপান্তর করতেJavaআপনার প্রয়োজন (যখন আপনি অ্যান্ড্রয়েড স্টুডিওতে আছেন):
প্রেস 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এই জিইউআইতে বেসিক আইডিই কার্যকারিতা কাজ করে: শ্রেণি অনুসন্ধান, ঘোষণার জন্য ক্লিক করুন। প্রভৃতি
এছাড়াও সমস্ত উত্স কোড সংরক্ষণ করা যায় এবং তারপরে ইন্টেলিজ আইডিইএর মতো অন্যান্য সরঞ্জাম ব্যবহার করে দেখা যায়।
brew install jadx
জাভা এবং কোটলিন জাভা ভার্চুয়াল মেশিনে (জেভিএম) চালায়।
কোটলিন ফাইলটিকে জাভা ফাইলে রূপান্তরকরণের মধ্যে দুটি পদক্ষেপের অর্থ জেটিএম বাইটকোডে কোটলিন কোডটি সংকলন করা এবং তারপরে জাভ কোডে বাইটকোডটি সংহত করে।
আপনার কোটলিন উত্স ফাইলটি জাভা উত্স ফাইলে রূপান্তর করার পদক্ষেপ: