DEX কোড অপ্টিমাইজেশন

DEX কোড অপ্টিমাইজেশন হল Android Vitals-এর একটি ফাইন্ডিং যা আপনাকে মনিটর করতে এবং আপনার অ্যাপের কম্পাইলেশন কোয়ালিটি, সাইজ ও পারফর্ম্যান্স উন্নত করতে সাহায্য করে। R8 বা বিকল্প টুল (যেমন ProGuard-এর সাথে মানানসই অপ্টিমাইজার বা সেকেন্ডারি DEX পোস্ট-প্রসেসর) ব্যবহার করে আপনার কোড অপ্টিমাইজ ও অফস্কেট করলে, আপনার অ্যাপের DEX সাইজ কমে যায়, রানটাইম পারফর্ম্যান্স উন্নত হয় এবং মেমরি ফুডপ্রিন্ট কমে যায়।

DEX বা Dalvik Executable ফাইলগুলিতে আপনার অ্যাপ চালানোর জন্য ব্যবহৃত কম্পাইল করা কোড থাকে। এর মধ্যে সাধারণত কম্পাইল করা C++ কোড বা .so ফাইলের পরিবর্তে Java ও Kotlin কোড থাকে।

Android Vitals রিপোর্ট সব অ্যাপ ও গেমের জন্য DEX কোড অপ্টিমাইজেশন মেট্রিক দেখায়, কিন্তু শুধুমাত্র নির্দিষ্ট সাইজ সংক্রান্ত প্রয়োজনীয়তা পূরণ করা অ্যাপ ও গেমের জন্য থ্রেশহোল্ড প্রয়োগ করে।

সমস্যা শনাক্ত করা

আপনার অ্যাপের DEX কোড অপ্টিমাইজেশন লেভেল কম হলে, Android Vitals আপনাকে সতর্ক করতে পারে। এর মধ্যে R8 ব্যবহার করে এমন অ্যাপ ও গেমের জন্য অফস্কেশন, সাইজ কমানো ও অপ্টিমাইজ করা অন্তর্ভুক্ত। যেসব অ্যাপ R8 ব্যবহার করে না, সেগুলির ক্ষেত্রে Android Vitals, অপ্টিমাইজেশন, সাইজ কমানো ও অবফাসকেশন রেট চেক করার চেষ্টা করে, তবে যেখানে প্রয়োজন সেখানে অবফাসকেশন হিউরিস্টিককে প্রক্সি হিসেবে ব্যবহার করে।

অপ্টিমাইজেশন স্ট্যাটাস মনিটর করা

কোড অপ্টিমাইজেশনের জন্য আপনার অ্যাপ ন্যূনতম নির্ধারিত শতাংশ পূরণ না করলে, Android Vitals আপনাকে Play Console-এর মাধ্যমে সতর্ক করে আপনার অ্যাপের পারফর্ম্যান্স উন্নত করতে সাহায্য করতে পারে। কোড ছোট করা, অপ্টিমাইজ করা ও অস্পষ্ট করার বিস্তারিত সংজ্ঞা পেতে, R8 কনফিগারেশন অ্যানালাইজার ব্যবহার করুন দেখুন।

AGP ভার্সন 8.10 বা তার পরবর্তী ভার্সনের লেটেস্ট প্যাচ দিয়ে তৈরি অ্যাপের ক্ষেত্রে, অন্তর্ভুক্ত r8.json ফাইল থেকে এইসব পার্সেন্টেজ নেওয়া হয়।

AGP-এর আগের ভার্সন বা যেখানে r8.json ফাইল অন্তর্ভুক্ত করা নেই, সেখানে mapping.txt ফাইল অন্তর্ভুক্ত করা থাকলে, তার থেকে শতাংশ হিসেব করা হয় অথবা ম্যাপিং ফাইল উপলভ্য না থাকলে, DEX হিউরিস্টিক ব্যবহার করে হিসেব করা হয়।

বিকল্প কোড অপ্টিমাইজার দিয়ে অপ্টিমাইজ করা অ্যাপের ক্ষেত্রে, Android vitals ক্লাস, পদ্ধতি ও ফিল্ডের শতাংশ অনুমান করতে একটি বিশ্লেষণ করে যা অ্যাপ বান্ডেলে অস্পষ্ট করা হয়।

মোট DEX সাইজের ন্যূনতম মান

Android Vitals সব অ্যাপের জন্য কোড অপ্টিমাইজেশন মেট্রিক গণনা করলেও, আপনার অ্যাপ বান্ডেল নিম্নলিখিত মোট DEX সাইজ সংক্রান্ত প্রয়োজনীয়তা পূরণ করলে তবেই আপনি অ্যালার্ট পাবেন:

  • অ্যাপ: বান্ডেলে কমপক্ষে ১০ এমবি DEX কোড থাকতে হবে, যা আনকমপ্রেসড সাইজ হিসেবে পরিমাপ করা হয়
  • গেম: বান্ডেলে কমপক্ষে ৫০ এমবি DEX কোড থাকতে হবে, যা আনকমপ্রেসড সাইজ হিসেবে পরিমাপ করা হয়

Android vitals আপনার অ্যাপের DEX সাইজ দেখায়, তবে আপনি কমান্ড লাইন ব্যবহার করে এটি লোকালভাবেও পরিমাপ করতে পারেন:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

স্থানীয়ভাবে R8 কোড অপ্টিমাইজেশন পরিমাপ করা

আপনার অ্যাপ R8-এর সাথে অপ্টিমাইজ করলে, আপনি R8 কনফিগারেশন অ্যানালাইজার ব্যবহার করে আপনার অ্যাপ বান্ডেলের অপ্টিমাইজেশন, অফস্কেশন এবং সাইজ কমানো পরিমাপ করতে পারবেন। এছাড়াও, R8 কনফিগারেশন অ্যানালাইজার রিপোর্ট R8 অ্যানালাইজার স্কিলে অন্তর্ভুক্ত থাকে। আপনার কীপ নিয়ম কীভাবে অপ্টিমাইজেশন, সাইজ কমানো ও অবফাসকেশন স্কোরকে প্রভাবিত করে তা রিপোর্ট থেকে বুঝতে পারবেন। তবে, রিপোর্টে দেখানো শতাংশের সাথে Android Vitals-এর ভ্যালু মিলবে না, কারণ এই শতাংশ অপ্টিমাইজেশনের আগে গণনা করা হয়।

আপনার স্কোর গণনা করার জন্য Android Vitals যে মেটাডেটা ব্যবহার করে তা পুঙ্খানুপুঙ্খভাবে পরীক্ষা করতে, আপনার অ্যাপ বান্ডেল থেকে r8.json ফাইল এক্সট্র্যাক্ট করুন:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
চেক করুন

সমস্যার সমাধান করা

কম DEX কোড অপ্টিমাইজেশন স্কোর সংক্রান্ত সমস্যার সমাধান করতে, আপনার বিল্ড সিস্টেম ও অপ্টিমাইজার অনুযায়ী সাজেশন পর্যালোচনা করুন:

Android Gradle Plugin এবং R8

আপনার R8 DEX কোড অপ্টিমাইজেশন স্কোর উন্নত করতে, R8 অপ্টিমাইজেশন উন্নত করুন লিঙ্কে গিয়ে নির্দেশিকা দেখুন। এছাড়াও, আপনার অ্যাপের কীপ নিয়ম অপ্টিমাইজ করার ব্যাপারে অতিরিক্ত নির্দেশিকা পেতে, আপনি R8 অ্যানালাইজার স্কিল ব্যবহার করতে পারেন।

R8 নয় এমন বিল্ড সিস্টেম ও DEX পোস্ট-প্রসেসর

আপনার বিল্ড পাইপলাইন কাস্টম বিল্ড টুল বা সেকেন্ডারি DEX পোস্ট-প্রসেসর ব্যবহার করলে, আপনার অ্যাপের অপ্টিমাইজেশন উন্নত করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  • Android Studio-তে আপনার অ্যাপ বান্ডেল খুলুন এবং APK অ্যানালাইজার-এ এটি দেখুন।
  • সব .dex ফাইল বেছে নিন।
  • সবচেয়ে বড় সাইজের ফাইলগুলির দিকে বিশেষ নজর দিন, কারণ আপনি "নাম ডিঅবফস্কেট করুন" বোতামটি টগল করছেন (মনে রাখবেন: এর জন্য আপনাকে mapping.txt ফাইল আপলোড করতে হবে)। আপনি যদি দেখেন যে কিছু ফাইল অবফিউস্কেট করার পরেও বড় থেকে গেছে, তাহলে সম্ভবত সেগুলি প্যাকেজ-ব্যাপী'কিপ' নিয়ম দ্বারা প্রভাবিত হয়েছে।
  • আপনার proguard-rules.pro ফাইল, configuration.txt অথবা আপনি R8 ব্যবহার না করলে, আপনার অপ্টিমাইজারের জন্য সমতুল্য বিকল্পে দেখুন এবং অস্পষ্ট করা হচ্ছে না এমন প্যাকেজের সাথে ম্যাচ করা'কিপ' নিয়ম খুঁজুন। যেমন, আপনার dex-এ com.foo. একটি বড় প্যাকেজ হলে, এই ফর্ম্যাটের keep নিয়ম খুঁজুন -keep com.foo.** অথবা -keep com.foo.bar.**।
  • মনে রাখবেন, লাইব্রেরি কনজিউমার কিপ রুল শনাক্ত করা ততটা সহজ নাও হতে পারে। আপনি যদি মনে করেন যে কোনও লাইব্রেরি কনজিউমার নিয়ম অপ্টিমাইজেশনকে প্রভাবিত করছে, তাহলে AGP-এর সাম্প্রতিক ভার্সন ব্যবহার করে কোনও স্বতন্ত্র স্যাম্পেল অ্যাপে এটি যোগ করে এবং R8 কনফিগারেশন অ্যানালাইজার দিয়ে এটি পরীক্ষা করে আপনি লোকালি যাচাই করতে পারেন।