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

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

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

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

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

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

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

আপনার অ্যাপ বান্ডেলে এমবেড করা পোস্ট-অপ্টিমাইজেশন মেটাডেটা পরিদর্শন করতে (AGP সংস্করণ 8.10 বা তার উচ্চতর সংস্করণের জন্য), 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 কনফিগারেশন অ্যানালাইজার দিয়ে পরীক্ষা করে স্থানীয়ভাবে যাচাই করতে পারেন।