بهینهسازی کد DEX یک یافته حیاتی اندروید است که به شما کمک میکند کیفیت کامپایل، اندازه و عملکرد برنامه خود را رصد و بهبود دهید. بهینهسازی و مبهمسازی کد شما با استفاده از R8 یا ابزارهای جایگزین (مانند بهینهسازهای سازگار با ProGuard یا پسپردازندههای ثانویه DEX) اندازه DEX برنامه شما را کاهش میدهد، عملکرد زمان اجرا را بهبود میبخشد و ردپای حافظه آن را به حداقل میرساند.
فایلهای DEX یا Dalvik Executable حاوی کد کامپایلشدهای هستند که برای اجرای برنامه شما استفاده میشوند. این کدها معمولاً شامل کد جاوا و کاتلین میشوند، برخلاف کد کامپایلشده ++C یا فایلهای .so .
Android Vitals معیارهای بهینهسازی کد DEX را برای همه برنامهها و بازیها گزارش میدهد، اما فقط آستانههایی را برای برنامهها و بازیهایی اعمال میکند که الزامات حجمی خاصی را برآورده میکنند.
مشکل را تشخیص دهید
Android Vitals میتواند در صورت پایین بودن سطح بهینهسازی کد DEX برنامه شما، به شما هشدار دهد. این شامل مبهمسازی، کوچکسازی و بهینهسازی برای برنامهها و بازیهایی است که از R8 استفاده میکنند. برای برنامههایی که از R8 استفاده نمیکنند، Android Vitals تلاش میکند تا نرخ بهینهسازی، کوچکسازی و مبهمسازی را بررسی کند، اما در صورت لزوم به عنوان یک پروکسی به اکتشافات مبهمسازی متوسل میشود.
نظارت بر وضعیت بهینهسازی
موارد حیاتی اندروید میتوانند با هشدار دادن از طریق کنسول Play در زمانی که برنامه شما حداقل درصدهای تعریفشده برای بهینهسازی کد را رعایت نمیکند، به بهبود عملکرد برنامه شما کمک کنند. برای تعاریف دقیق کوچکسازی، بهینهسازی و مبهمسازی، به بخش «استفاده از تحلیلگر پیکربندی R8» مراجعه کنید.
برای برنامههایی که با آخرین وصله AGP نسخه ۸.۱۰ یا بالاتر ساخته شدهاند، این درصدها از فایل r8.json موجود در بسته استخراج میشوند.
برای نسخههای پایینتر AGP یا جایی که فایل r8.json گنجانده نشده است، درصدها در صورت وجود فایل mapping.txt یا در صورت عدم وجود فایل mapping با استفاده از روشهای اکتشافی 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 Configuration Analyzer ، میزان بهینهسازی، مبهمسازی و کوچکسازی بسته برنامه خود را اندازهگیری کنید. گزارش R8 Configuration Analyzer همچنین در R8 Analyzer Skill گنجانده شده است.
برای بررسی دقیق متادیتایی که Android Vitals برای محاسبه امتیازات شما استفاده میکند، فایل r8.json را از بسته برنامه خود استخراج کنید:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
مشکل را برطرف کنید
برای رفع امتیازهای پایین بهینهسازی کد DEX، توصیههای مبتنی بر سیستم ساخت و بهینهساز خود را بررسی کنید:
افزونهی گریدل اندروید و R8
برای بهبود امتیازات بهینهسازی کد R8 DEX خود، به راهنماییهای موجود در بخش «بهبود بهینهسازی R8» مراجعه کنید. همچنین میتوانید از مهارت R8 Analyzer برای دریافت راهنماییهای بیشتر در مورد بهینهسازی قوانین Keep برنامه خود استفاده کنید.
سیستمهای ساخت غیر R8 و پسپردازندههای DEX
اگر خط تولید شما از ابزارهای ساخت سفارشی یا پردازندههای ثانویه DEX استفاده میکند، مراحل زیر را برای بهبود بهینهسازی برنامه خود انجام دهید:
- بسته برنامه خود را در اندروید استودیو باز کنید و آن را در APK Analyzer مشاهده کنید.
- تمام فایلهای
.dexرا انتخاب کنید. - هنگام فعال کردن دکمهی «Deobfuscate names» (توجه: این کار مستلزم آپلود یک فایل
mapping.txtاست ) به فایلهایی که بزرگترین حجم را دارند، توجه ویژهای داشته باشید. اگر متوجه شدید که برخی از این فایلها در حین مبهمسازی همچنان بزرگ باقی میمانند، احتمالاً تحت تأثیر قوانین keep در کل بسته قرار گرفتهاند. - در فایل
proguard-rules.pro،configuration.txtیا معادل آن برای optimizer خود (اگر از R8 استفاده نمیکنید) جستجو کنید و قوانین keep را که با بستههایی که مبهمسازی نمیشوند مطابقت دارند، جستجو کنید. برای مثال، اگرcom.foo.یک بسته بزرگ در dex شما است، به دنبال قوانین keep با فرمت-keep com.foo.**یا-keep com.foo.bar.**. - به خاطر داشته باشید که شناسایی قوانین مصرفکننده کتابخانه ممکن است به این سادگی نباشد. اگر مشکوک هستید که یک قانون مصرفکننده کتابخانه بر بهینهسازی تأثیر میگذارد، میتوانید با اضافه کردن آن به یک برنامه نمونه مستقل با استفاده از نسخه اخیر AGP و بررسی آن با R8 Configuration Analyzer، آن را به صورت محلی تأیید کنید.