DEX কোড অপ্টিমাইজেশন হল Android Vitals-এর একটি ফাইন্ডিং যা আপনার অ্যাপের কম্পাইলেশন কোয়ালিটি, সাইজ ও পারফর্ম্যান্স মনিটর ও উন্নত করতে সাহায্য করে। R8 বা বিকল্প টুল (যেমন ProGuard-এর সাথে মানানসই অপ্টিমাইজার বা সেকেন্ডারি DEX পোস্ট-প্রসেসর) ব্যবহার করে আপনার কোড অপ্টিমাইজ ও অস্পষ্ট করলে, আপনার অ্যাপের DEX সাইজ কমে, রানটাইম পারফর্ম্যান্স উন্নত হয় এবং মেমরি ফুটপ্রিন্ট কমে।
DEX বা Dalvik Executable ফাইলে আপনার অ্যাপ চালানোর জন্য ব্যবহৃত কম্পাইল করা কোড থাকে।
এতে সাধারণত Java এবং Kotlin কোড থাকে, কম্পাইল করা C++ কোড বা .so ফাইল
থাকে না।
Android Vitals সব অ্যাপ ও গেমের জন্য DEX কোড অপ্টিমাইজেশন মেট্রিক রিপোর্ট করে, তবে শুধুমাত্র নির্দিষ্ট সাইজের প্রয়োজনীয়তা পূরণ করে এমন অ্যাপ ও গেমের জন্য থ্রেশহোল্ড প্রয়োগ করে।
সমস্যা শনাক্ত করা
আপনার অ্যাপের DEX কোড অপ্টিমাইজেশন, সঙ্কোচন বা অস্পষ্টতার লেভেল ন্যূনতম নির্ধারিত শতাংশ পূরণ না করলে, Android vitals আপনাকে Play Console-এ সতর্ক করতে পারে।
অপ্টিমাইজেশন স্কোর কীভাবে গণনা করা হয়
AGP 8.10 বা তার পরবর্তী ভার্সনের লেটেস্ট প্যাচ ভার্সন দিয়ে তৈরি অ্যাপের ক্ষেত্রে (যেমন,
8.10.0-এর পরিবর্তে 8.10.1), এই শতাংশ অন্তর্ভুক্ত
r8.json ফাইল থেকে নেওয়া হয়। আপনার মাইনর ভার্সনের জন্য AGP ও R8-এর লেটেস্ট প্যাচ ভার্সন ব্যবহার করছেন কিনা তা নিশ্চিত করুন, যাতে সঠিক মেটাডেটা তৈরি হয়।
AGP-এর আগের ভার্সন দিয়ে তৈরি অ্যাপ অথবা বিকল্প কোড অপ্টিমাইজার দিয়ে অপ্টিমাইজ করা অ্যাপ যেখানে r8.json অন্তর্ভুক্ত নেই,
সেগুলির ক্ষেত্রে Android Vitals mapping.txt ফাইল (যদি অন্তর্ভুক্ত থাকে) অথবা DEX হিউরিস্টিকস ব্যবহার করে
প্রক্সি হিসেবে অবফাসকেশন শতাংশ অনুমান করে।
মোট DEX সাইজের ন্যূনতম সীমা
Android Vitals সব অ্যাপের জন্য কোড অপ্টিমাইজেশন মেট্রিক্স গণনা করলেও, আপনার অ্যাপ বান্ডেল নিম্নলিখিত মোট DEX সাইজের প্রয়োজনীয়তা পূরণ করলে তবেই আপনি সতর্কতা পাবেন:
- অ্যাপ: বান্ডেলে অন্তত ১০ এমবি DEX কোড আছে যা আনকমপ্রেসড সাইজ হিসেবে পরিমাপ করা হয়
- গেম: বান্ডেলে অন্তত ৫০ এমবি DEX কোড থাকে যা আনকমপ্রেসড সাইজ হিসেবে পরিমাপ করা হয়
স্থানীয়ভাবে কোড অপ্টিমাইজেশন পরিমাপ করুন
আপনার অ্যাপ বান্ডেলের আনকমপ্রেসড DEX সাইজ পরিমাপ করতে এবং Android ভাইটালসে
পাওয়া ফলাফলের সাথে মেলে এমন অপ্টিমাইজেশন, সঙ্কুচিতকরণ এবং অস্পষ্টকরণের শতাংশ পেতে,
android analyze রান করুন:
android analyze <yourapp>.aab
সমস্যার সমাধান করা
কম DEX কোড অপ্টিমাইজেশন স্কোর সংক্রান্ত সমস্যার সমাধান করতে, আপনার বিল্ড সিস্টেম এবং অপ্টিমাইজারের উপর ভিত্তি করে সাজেশন পর্যালোচনা করুন:
R8
আপনার R8 DEX কোড অপ্টিমাইজেশন স্কোর উন্নত করতে, R8 অপ্টিমাইজেশন উন্নত করুন লিঙ্কে দেওয়া নির্দেশিকা দেখুন এবং আপনার রাখা নিয়মগুলি কীভাবে আপনার অপ্টিমাইজেশন, সঙ্কুচিত করা এবং অস্পষ্টতা স্কোরকে প্রভাবিত করে তা বুঝতে R8 কনফিগারেশন বিশ্লেষক ব্যবহার করুন (এই মেট্রিকগুলির বিস্তারিত সংজ্ঞার জন্য, রিপোর্ট বুঝুন দেখুন)।
আপনি Android Gradle প্লাগ-ইন (AGP) ব্যবহার করলে, আপনার অ্যাপের 'কিপ' রুল অপ্টিমাইজ করার ব্যাপারে অতিরিক্ত নির্দেশিকা পেতে
R8 Analyzer স্কিল ব্যবহার করতে পারেন। আপনি Bazel ব্যবহার করলে, R8 কনফিগারেশন অ্যানালাইজারও অ্যাক্সেস করতে পারবেন;
rules_android R8 অপ্টিমাইজেশন ডকুমেন্টেশন দেখুন।
নন-R8 অপ্টিমাইজার এবং DEX পোস্ট-প্রসেসর
আপনার বিল্ড পাইপলাইন যদি কাস্টম বিল্ড টুল বা সেকেন্ডারি DEX পোস্ট-প্রসেসর ব্যবহার করে, তাহলে আপনার অ্যাপের অপ্টিমাইজেশন উন্নত করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- Android Studio-তে আপনার অ্যাপ বান্ডেল খুলুন এবং APK Analyzer-এ এটি দেখুন।
.dexটি ফাইলের সবকটি বেছে নিন।- "নাম ডিঅবফাসকেট করুন" বোতাম টগল করার সময় সবচেয়ে বড় সাইজের ফাইলের দিকে বিশেষ নজর দিন (মনে রাখবেন: এর জন্য আপনাকে
একটি
mapping.txtফাইল লোড করতে হবে)। আপনি যদি দেখেন যে এই ফাইলগুলির মধ্যে কিছু ফাইল অস্পষ্ট করার পরেও বড় থাকে, তাহলে সম্ভবত সেগুলি প্যাকেজ-ওয়াইড কিপ রুল দ্বারা প্রভাবিত হয়। - আপনার
proguard-rules.proফাইল,configuration.txt, অথবা আপনি R8 ব্যবহার না করলে আপনার অপ্টিমাইজারের সমতুল্য ফাইলে দেখুন এবং অবফিউসকেট করা হচ্ছে না এমন প্যাকেজের সাথে মেলে এমন নিয়মগুলি খুঁজুন। যেমন, আপনার DEX ফাইলেcom.foo.যদি একটি বড় প্যাকেজ হয়, তাহলে-keep com.foo.**বা-keep com.foo.bar.**ফর্ম্যাটের কিপ রুল খুঁজুন। - মনে রাখবেন যে লাইব্রেরি গ্রাহকের রাখার নিয়ম শনাক্ত করা ততটা সহজ নাও হতে পারে। আপনি যদি সন্দেহ করেন যে লাইব্রেরি কনজিউমার রুল অপ্টিমাইজেশনকে প্রভাবিত করছে,
তাহলে আপনি সরাসরি
android analyze <library>.aarব্যবহার করে লাইব্রেরিটি পরীক্ষা করতে পারেন, অথবা AGP-এর সাম্প্রতিক ভার্সন ব্যবহার করে একটি স্বতন্ত্র স্যাম্পেল অ্যাপে লাইব্রেরি যোগ করে এটি যাচাই করতে পারেন এবং R8 কনফিগারেশন অ্যানালাইজার-এর মাধ্যমে এটি পরীক্ষা করতে পারেন।