d8
হল একটি কমান্ড-লাইন টুল যা অ্যান্ড্রয়েড স্টুডিও এবং অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপনার প্রোজেক্টের জাভা বাইটকোডকে DEX বাইটকোডে কম্পাইল করতে ব্যবহার করে যা অ্যান্ড্রয়েড ডিভাইসে চলে। d8
আপনাকে আপনার অ্যাপের কোডে Java 8 ভাষার বৈশিষ্ট্য ব্যবহার করতে দেয়।
অ্যান্ড্রয়েড বিল্ড টুলস 28.0.1 এবং উচ্চতর: android_sdk /build-tools/ version /
-এ d8
একটি স্বতন্ত্র টুল হিসেবেও অন্তর্ভুক্ত করা হয়েছে।
সাধারণ ব্যবহার
d8
জন্য শুধুমাত্র কম্পাইল করা জাভা বাইটকোডের একটি পাথ প্রয়োজন যা আপনি DEX বাইটকোডে রূপান্তর করতে চান। যেমন:
d8 MyProject/app/build/intermediates/classes/debug/*/*.class
ইনপুট বাইটকোড *.class
ফাইল বা পাত্রের যেকোনো সংমিশ্রণে হতে পারে, যেমন JAR, APK, বা ZIP ফাইল। আপনি DEX আউটপুটে একত্রিত করার জন্য d8
এর জন্য DEX ফাইলগুলিও অন্তর্ভুক্ত করতে পারেন, যা একটি বর্ধিত বিল্ড থেকে আউটপুট অন্তর্ভুক্ত করার সময় দরকারী।
ডিফল্টরূপে, d8
জাভা বাইটকোডকে অপ্টিমাইজ করা DEX ফাইলগুলিতে কম্পাইল করে এবং ডিবাগ তথ্য অন্তর্ভুক্ত করে যা আপনি রানটাইমের সময় আপনার কোড ডিবাগ করতে ব্যবহার করতে পারেন। যাইহোক, আপনি একটি ক্রমবর্ধমান বিল্ড সম্পাদন করতে ঐচ্ছিক পতাকাগুলি অন্তর্ভুক্ত করতে পারেন, মূল DEX ফাইলে কম্পাইল করা উচিত এমন ক্লাসগুলি নির্দিষ্ট করুন এবং Java 8 ভাষার বৈশিষ্ট্যগুলি ব্যবহার করার জন্য প্রয়োজনীয় অতিরিক্ত সংস্থানগুলির পাথগুলি নির্দিষ্ট করুন৷
d8 path-to-input-files [options]
নিম্নলিখিত সারণীতে ঐচ্ছিক পতাকাগুলি বর্ণনা করা হয়েছে যা আপনি d8
এর সাথে ব্যবহার করতে পারেন:
অপশন | বর্ণনা |
---|---|
--debug | ডিবাগ তথ্য, যেমন ডিবাগ প্রতীক টেবিল অন্তর্ভুক্ত করতে DEX বাইটকোড কম্পাইল করুন। এই বিকল্পটি ডিফল্টরূপে সক্রিয় করা হয়। আপনার DEX বাইটকোডে ডিবাগ তথ্য অন্তর্ভুক্ত করতে, আপনার অ্যাপ বা লাইব্রেরির রিলিজ সংস্করণের জন্য DEX ফাইল কম্পাইল করার সময়, পরিবর্তে |
--release | ডিবাগ তথ্য ছাড়াই DEX বাইটকোড কম্পাইল করুন। যাইহোক, পাবলিক রিলিজের জন্য বাইটকোড কম্পাইল করার সময় এই পতাকাটি পাস করুন। |
--output path | DEX আউটপুট জন্য পছন্দসই পথ নির্দিষ্ট করুন. ডিফল্টরূপে, আপনি যদি একটি ZIP বা JAR ফাইলের একটি পথ এবং নাম উল্লেখ করেন, |
--lib android_sdk /platforms/ api-level /android.jar | আপনার Android SDK-এর android.jar এর পথ নির্দিষ্ট করুন৷ জাভা 8 ভাষার বৈশিষ্ট্য ব্যবহার করে বাইটকোড কম্পাইল করার সময় এই পতাকাটির প্রয়োজন হয়। |
--classpath path | আপনার প্রকল্পের DEX ফাইলগুলি কম্পাইল করার জন্য d8 প্রয়োজন হতে পারে এমন ক্লাসপাথ সংস্থানগুলি নির্দিষ্ট করুন৷ বিশেষ করে, d8 প্রয়োজন হয় যে বাইটকোড কম্পাইল করার সময় আপনি নির্দিষ্ট রিসোর্স নির্দিষ্ট করুন যা Java 8 ভাষার বৈশিষ্ট্য ব্যবহার করে । |
--min-api number | ন্যূনতম API স্তর নির্দিষ্ট করুন যা আপনি আউটপুট DEX ফাইলগুলিকে সমর্থন করতে চান৷ |
--intermediate | d8 কে জানাতে এই পতাকাটি পাস করুন যে আপনি আপনার প্রকল্পের জাভা বাইটকোডের সম্পূর্ণ সেট কম্পাইল করছেন না। ক্রমবর্ধমান বিল্ডগুলি সম্পাদন করার সময় এই পতাকাটি কার্যকর। অপ্টিমাইজ করা DEX ফাইলগুলিকে কম্পাইল করার পরিবর্তে যা আপনি একটি ডিভাইসে চালানোর আশা করেন, d8 মধ্যবর্তী DEX ফাইল তৈরি করে এবং নির্দিষ্ট আউটপুট বা ডিফল্ট পাথে সেগুলি সংরক্ষণ করে।আপনি যখন DEX ফাইলগুলিকে কম্পাইল করতে চান যা আপনি একটি ডিভাইসে চালাতে চান, তখন এই পতাকাটি বাদ দিন এবং একটি ইনপুট হিসাবে মধ্যবর্তী DEX ক্লাসের পথটি নির্দিষ্ট করুন৷ |
--file-per-class | প্রতিটি ক্লাসকে আলাদা DEX ফাইলে কম্পাইল করুন। এই ফ্ল্যাগটি সক্ষম করলে আপনি শুধুমাত্র পরিবর্তিত ক্লাসগুলিকে পুনরায় কম্পাইল করে আরও ক্রমবর্ধমান বিল্ডগুলি সম্পাদন করতে পারবেন৷ অ্যান্ড্রয়েড গ্রেডল প্লাগইন ব্যবহার করে ক্রমবর্ধমান বিল্ডগুলি সম্পাদন করার সময়, এই অপ্টিমাইজেশনটি ডিফল্টরূপে সক্রিয় থাকে। |
--no-desugaring | Java 8 ভাষা বৈশিষ্ট্য অক্ষম করুন। এই পতাকাটি ব্যবহার করুন শুধুমাত্র যদি আপনি জাভা বাইটকোড কম্পাইল করতে চান না যা Java 8 ভাষা বৈশিষ্ট্য ব্যবহার করে। |
--main-dex-list path | একটি টেক্সট ফাইল নির্দিষ্ট করুন যা ক্লাস যেহেতু অ্যান্ড্রয়েড সিস্টেম আপনার অ্যাপ শুরু করার সময় প্রথমে প্রধান DEX ফাইল লোড করে, তাই আপনি মূল DEX ফাইলে কম্পাইল করে স্টার্টআপে নির্দিষ্ট ক্লাসকে অগ্রাধিকার দিতে এই পতাকা ব্যবহার করতে পারেন। লিগ্যাসি মাল্টিডেক্স সমর্থন করার সময় এটি বিশেষভাবে কার্যকর, কারণ লিগ্যাসি মাল্টিডেক্স লাইব্রেরি লোড না হওয়া পর্যন্ত রানটাইমে শুধুমাত্র প্রধান DEX ফাইলের ক্লাসগুলি উপলব্ধ থাকে। মনে রাখবেন, প্রতিটি DEX ফাইলকে এখনও 64K রেফারেন্স সীমা পূরণ করতে হবে। সুতরাং, প্রধান DEX ফাইলের জন্য অনেকগুলি ক্লাস নির্দিষ্ট করবেন না, অথবা আপনি একটি কম্পাইল ত্রুটি পাবেন। ডিফল্টরূপে, |
--pg-map file | বিতরণের জন্য একটি ম্যাপিং ফাইল হিসাবে file ব্যবহার করুন। |
--file-per-class-file | প্রতি ইনপুট .class ফাইলের জন্য একটি আলাদা DEX ফাইল তৈরি করুন। কৃত্রিম শ্রেণীগুলিকে তাদের উদ্ভূত শ্রেণীর সাথে রাখুন। |
--desugared-lib file | একটি desugared লাইব্রেরি কনফিগারেশন নির্দিষ্ট করুন. file হল একটি ডিসুগারেড লাইব্রেরি কনফিগারেশন ফাইল JSON ফরম্যাটে। |
--main-dex-rules file | প্রোগার্ড প্রাথমিক DEX ফাইলে ক্লাস রাখার নিয়ম রাখে। |
--main-dex-list-output file | আউটপুট ফলাফল প্রধান DEX তালিকা মধ্যে |
| জোরপূর্বক javac জেনারেটেড অ্যাসারশন কোড সক্ষম করুন। |
| জোরপূর্বক javac জেনারেটেড অ্যাসারশন কোড অক্ষম করুন। DEX ফাইল তৈরি করার সময় এটি javac অ্যাসারশন কোডের ডিফল্ট হ্যান্ডলিং। |
| javac -generated assertion code পরিবর্তন করবেন না। class ফাইল তৈরি করার সময় এটি javac অ্যাসারশন কোডের ডিফল্ট হ্যান্ডলিং। |
| javac এবং kotlinc -generated assertion code পরিবর্তন করুন যাতে করে মেথড handler method ব্যবহার করে প্রতিটি অ্যাসার্টেশন ত্রুটির সাথে এটি ছুঁড়ে ফেলার পরিবর্তে। handler method একটি শ্রেণির নাম হিসাবে নির্দিষ্ট করা হয়েছে তারপরে একটি বিন্দু এবং পদ্ধতির নাম। হ্যান্ডলার পদ্ধতিতে java.lang.Throwable টাইপের একটি একক আর্গুমেন্ট নিতে হবে এবং রিটার্ন টাইপ void থাকতে হবে। |
--thread-count number of threads | সংকলনের জন্য ব্যবহার করার জন্য থ্রেডের সংখ্যা উল্লেখ করুন। যদি নির্দিষ্ট না করা হয়, সংখ্যাটি হিউরিস্টিকসের উপর ভিত্তি করে, কোরের সংখ্যা বিবেচনায় নিয়ে। |
--map-diagnostics[ : type ] from-level to-level | type ম্যাপ ডায়াগনস্টিকস (ডিফল্ট যেকোন) from-level থেকে to-level হিসাবে রিপোর্ট করা হয়েছে, যেখানে from-level এবং to-level হল 'তথ্য', 'সতর্কতা' বা 'ত্রুটি' এবং ঐচ্ছিক type হল সহজ বা একটি ডায়াগনস্টিক এর সম্পূর্ণ যোগ্য জাভা টাইপ নাম। যদি type অনির্দিষ্ট হয়, তবে from-level সমস্ত ডায়াগনস্টিক ম্যাপ করা হয়। মনে রাখবেন যে মারাত্মক কম্পাইলার ত্রুটি ম্যাপ করা যাবে না। |
--version | আপনি বর্তমানে যে d8 ব্যবহার করছেন সেটি প্রিন্ট করুন। |
--help | d8 ব্যবহার করার জন্য সাহায্য পাঠ্য মুদ্রণ করুন। |
ক্রমবর্ধমান বিল্ড সঞ্চালন
বিকাশের সময় বিল্ড গতি উন্নত করতে, যেমন ক্রমাগত ইন্টিগ্রেশন বিল্ডের জন্য, আপনার প্রোজেক্টের জাভা বাইটকোডের শুধুমাত্র একটি উপসেট কম্পাইল করার জন্য d8
নির্দেশ দিন। উদাহরণস্বরূপ, আপনি যদি প্রতি-শ্রেণীর ডেক্সিং সক্ষম করেন, আপনি শুধুমাত্র সেই ক্লাসগুলিকে পুনরায় কম্পাইল করতে পারেন যেগুলি আপনি পূর্ববর্তী বিল্ড থেকে পরিবর্তন করেছেন।
নিম্নলিখিত কমান্ডটি কয়েকটি ক্লাসের একটি ক্রমবর্ধমান বিল্ড সম্পাদন করে এবং প্রতি-শ্রেণীর ডেক্সিং সক্ষম করে। কমান্ডটি ক্রমবর্ধমান বিল্ডের জন্য একটি আউটপুট ডিরেক্টরিও নির্দিষ্ট করে।
d8 MainActivity.class R.class --intermediate --file-per-class --output ~/build/intermediate/dex
যখন d8
একটি ক্রমবর্ধমান বিল্ড সম্পাদন করে, তখন এটি DEX আউটপুটে অতিরিক্ত তথ্য সঞ্চয় করে। d8
পরে সেই তথ্যটি ব্যবহার করে সঠিকভাবে --main-dex-list
বিকল্পটি প্রক্রিয়া করতে এবং আপনার অ্যাপের সম্পূর্ণ বিল্ডের সময় DEX ফাইলগুলিকে মার্জ করতে।
উদাহরণস্বরূপ, জাভা 8 ল্যাম্বডা ক্লাস প্রক্রিয়া করার সময়, d8
প্রতিটি ইনপুট ক্লাসের জন্য কোন ল্যাম্বডা ক্লাস তৈরি করা হয়েছে তা ট্র্যাক করে। একটি সম্পূর্ণ বিল্ডের সময়, যখন d8
প্রধান DEX ফাইলে একটি ক্লাস অন্তর্ভুক্ত করে, তখন এটি মেটাডেটার সাথে পরামর্শ করে নিশ্চিত করে যে ক্লাসের জন্য তৈরি করা সমস্ত ল্যাম্বডা ক্লাসগুলিও মূল DEX ফাইলে অন্তর্ভুক্ত করা হয়েছে।
আপনি যদি ইতিমধ্যেই একাধিক ইনক্রিমেন্টাল বিল্ড জুড়ে আপনার প্রোজেক্টের সমস্ত বাইটকোড DEX ফাইলগুলিতে কম্পাইল করে থাকেন, তাহলে নিম্নোক্ত কমান্ডে দেখানো হিসাবে মধ্যবর্তী DEX ফাইলগুলির ডিরেক্টরিকে d8
এ পাস করে একটি সম্পূর্ণ বিল্ড করুন। উপরন্তু, আপনি --main-dex-list
ব্যবহার করে মূল DEX ফাইলে d8
কম্পাইল করতে চান এমন ক্লাসগুলি নির্দিষ্ট করতে পারেন। যেহেতু ইনপুটটি ফাইলগুলির একটি সেট যা ইতিমধ্যেই DEX বাইটকোডে কম্পাইল করা হয়েছে, এই বিল্ডটি একটি পরিষ্কার বিল্ডের চেয়ে দ্রুত সম্পন্ন হওয়া উচিত।
d8 ~/build/intermediate/dex --release --main-dex-list ~/build/classes.txt --output ~/build/release/dex
জাভা 8 ভাষার বৈশিষ্ট্য ব্যবহার করে বাইটকোড কম্পাইল করুন
d8
আপনাকে desugaring নামক একটি কম্পাইল প্রক্রিয়ার মাধ্যমে আপনার কোডে জাভা 8 ভাষার বৈশিষ্ট্যগুলি ব্যবহার করতে সক্ষম করে। Desugaring এই দরকারী ভাষা বৈশিষ্ট্যগুলিকে বাইটকোডে রূপান্তর করে যা Android প্ল্যাটফর্মে চলতে পারে।
অ্যান্ড্রয়েড স্টুডিও এবং অ্যান্ড্রয়েড গ্রেডল প্লাগইন ক্লাসপাথ সংস্থানগুলি অন্তর্ভুক্ত করে যা আপনার জন্য ডিসুগারিং সক্ষম করতে d8
এর প্রয়োজন৷ যাইহোক, কমান্ড লাইন থেকে d8
ব্যবহার করার সময়, আপনাকে সেগুলি নিজেকে অন্তর্ভুক্ত করতে হবে।
এরকম একটি রিসোর্স হল আপনার টার্গেট Android SDK থেকে android.jar
। এই সংস্থানটিতে Android প্ল্যাটফর্ম API-এর একটি সেট অন্তর্ভুক্ত রয়েছে। --lib
পতাকা ব্যবহার করে এর পথ সুনির্দিষ্ট করুন।
আরেকটি রিসোর্স হল আপনার প্রোজেক্টে কম্পাইল করা জাভা বাইটকোডের সেট যা আপনি বর্তমানে DEX বাইটকোডে কম্পাইল করছেন না কিন্তু অন্যান্য ক্লাসকে DEX বাইটকোডে কম্পাইল করতে হবে।
উদাহরণস্বরূপ, যদি আপনার কোডটি ডিফল্ট এবং স্ট্যাটিক ইন্টারফেস পদ্ধতি ব্যবহার করে, যা একটি জাভা 8 ভাষার বৈশিষ্ট্য, আপনাকে আপনার সমস্ত প্রকল্পের জাভা বাইটকোডের পথ নির্দিষ্ট করতে এই পতাকাটি ব্যবহার করতে হবে, এমনকি যদি আপনি সমস্ত কম্পাইল করতে চান না। DEX বাইটকোডে বাইটকোড। কারণ আপনার প্রজেক্টের কোড বুঝতে এবং ইন্টারফেস পদ্ধতিতে কল করার জন্য d8
এই তথ্যের প্রয়োজন।
নিম্নলিখিত কোড নমুনা একটি ডিফল্ট ইন্টারফেস পদ্ধতি অ্যাক্সেস করে এমন একটি ক্লাসের একটি ক্রমবর্ধমান বিল্ড সঞ্চালন করে:
d8 MainActivity.class --intermediate --file-per-class --output ~/build/intermediate/dex --lib android_sdk/platforms/api-level/android.jar --classpath ~/build/javac/debug