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

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

DEX বা ডালভিক এক্সিকিউটেবল ফাইলে আপনার অ্যাপ চালানোর জন্য ব্যবহৃত কম্পাইল করা কোড থাকে। এতে সাধারণত জাভা এবং কোটলিন কোড অন্তর্ভুক্ত থাকে, যা কম্পাইল করা C++ কোড বা .so ফাইলের থেকে ভিন্ন।

অ্যান্ড্রয়েড ভাইটালস সমস্ত অ্যাপ এবং গেমের জন্য DEX কোড অপ্টিমাইজেশন মেট্রিক্স রিপোর্ট করে, কিন্তু শুধুমাত্র সেইসব অ্যাপ এবং গেমের জন্য নির্ধারিত সীমা প্রয়োগ করে যেগুলো নির্দিষ্ট আকারের প্রয়োজনীয়তা পূরণ করে।

সমস্যাটি শনাক্ত করুন

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

অপ্টিমাইজেশন স্থিতি নিরীক্ষণ করুন

আপনার অ্যাপ যখন কোড অপটিমাইজেশনের জন্য নির্ধারিত ন্যূনতম শতাংশ পূরণ করতে ব্যর্থ হয়, তখন প্লে কনসোলের মাধ্যমে আপনাকে সতর্ক করে অ্যান্ড্রয়েড ভাইটালস আপনার অ্যাপের পারফরম্যান্স উন্নত করতে সাহায্য করতে পারে। শ্রিনকিং, অপটিমাইজেশন এবং অবফাসকেশনের বিস্তারিত সংজ্ঞার জন্য, “Use R8 Configuration Analyzer” দেখুন।

AGP ভার্সন ৮.১০ বা তার উচ্চতর সংস্করণের সর্বশেষ প্যাচ দিয়ে তৈরি অ্যাপগুলোর ক্ষেত্রে, এই শতাংশগুলো অন্তর্ভুক্ত r8.json ফাইল থেকে নেওয়া হয়।

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

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

মোট DEX আকারের ন্যূনতম

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

  • অ্যাপস : বান্ডেলটিতে অসংকুচিত আকার অনুযায়ী কমপক্ষে ১০ মেগাবাইট DEX কোড রয়েছে।
  • গেমস : বান্ডেলটিতে অসংকুচিত আকারে পরিমাপকৃত কমপক্ষে ৫০ মেগাবাইট DEX কোড রয়েছে।

অ্যান্ড্রয়েড ভাইটালস আপনার অ্যাপের DEX সাইজ প্রদর্শন করে, কিন্তু আপনি কমান্ড লাইন ব্যবহার করে স্থানীয়ভাবেও এটি পরিমাপ করতে পারেন:

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

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

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

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

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

সমস্যাটি সমাধান করুন

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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন এবং R8

আপনার R8 DEX কোড অপ্টিমাইজেশন স্কোর উন্নত করতে, "Improve R8 optimization" -এ দেওয়া নির্দেশিকা দেখুন। এছাড়াও, আপনার অ্যাপের 'keep rules' অপ্টিমাইজ করার বিষয়ে অতিরিক্ত নির্দেশিকা পেতে আপনি R8 Analyzer স্কিলটি ব্যবহার করতে পারেন।

নন-আর৮ বিল্ড সিস্টেম এবং ডিইএক্স পোস্ট-প্রসেসর

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

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