بهینهسازی کد DEX یکی از یافتههای «معیارهای کلیدی Android» است که به شما کمک میکند کیفیت، اندازه، و عملکرد گردآوری برنامهتان را پایش و بهبود دهید. بهینهسازی و مبهمسازی کد بااستفاده از R8 یا ابزارهای جایگزین (مثل بهینهسازهای سازگار با ProGuard یا پسپردازشگرهای DEX ثانویه) حجم DEX برنامه را کاهش میدهد، عملکرد زمان اجرا را بهبود میبخشد، و ردپای حافظه آن را به حداقل میرساند.
فایلهای DEX یا Dalvik Executable حاوی کد کامپایلشدهای است که برای اجرای برنامه شما استفاده میشود. این کد معمولاً شامل کد Java و Kotlin است، برخلاف کد C++ کامپایلشده یا فایلهای .so.
گزارشهای «معیارهای کلیدی Android» سنجههای بهینهسازی کد DEX را برای همه برنامهها و بازیها ارائه میدهد، اما آستانهها را فقط برای برنامهها و بازیهایی که الزامات اندازه خاصی را برآورده میکنند اعمال میکند.
مشکل را تشخیص دهید
وقتی سطوح بهینهسازی کد DEX برنامهتان پایین باشد، «معیارهای کلیدی Android» میتواند به شما هشدار دهد. این شامل مبهمسازی، کوچکسازی، و بهینهسازی برای برنامهها و بازیهایی است که از R8 استفاده میکنند. برای برنامههایی که از R8 استفاده نمیکنند، «عملکرد فنی Android» تلاش میکند نرخهای بهینهسازی، کوچکسازی، و مبهمسازی را بررسی کند، اما درصورت لزوم از اکتشافات مبهمسازی بهعنوان پراکسی استفاده میکند.
پایش وضعیت بهینهسازی
«معیارهای کلیدی Android» با هشدار دادن به شما ازطریق «کنسول Play» درصورتیکه برنامهتان حداقل درصدهای تعریفشده برای بهینهسازی کد را برآورده نکند، میتواند به بهبود عملکرد برنامهتان کمک کند. برای تعریفهای دقیق کوچکسازی، بهینهسازی، و مبهمسازی، استفاده از «تجزیهوتحلیلگر پیکربندی R8» را ببینید.
برای برنامههایی که با جدیدترین وصله AGP نسخه ۸.۱۰ یا بالاتر ساخته شدهاند، این
درصدها از فایل r8.json اضافهشده استخراج میشوند.
برای نسخههای پایینتر AGP یا در مواردی که فایل r8.json وجود ندارد،
درصدها از فایل mapping.txt (درصورت وجود) یا بااستفاده از
روشهای اکتشافی DEX (درصورت دردسترس نبودن فایل نگاشت) محاسبه میشوند.
برای برنامههایی که با بهینهساز کد جایگزین بهینه شدهاند، «معیارهای کلیدی Android» تجزیهوتحلیلی انجام میدهد تا درصد کلاسها، روشها، و فیلدهایی را که در بسته برنامه مبهمسازی شدهاند تخمین بزند.
حداقلهای اندازه کل DEX
اگرچه «نشانگرهای حیاتی Android» سنجههای بهینهسازی کد را برای همه برنامهها محاسبه میکند، فقط درصورتی هشدار دریافت خواهید کرد که بسته برنامه شما الزامات زیر را برای اندازه کل DEX داشته باشد:
- برنامهها: بسته حاوی حداقل ۱۰ مگابایت کد DEX است که بهعنوان اندازه فشردهنشده اندازهگیری میشود
- بازیها: بسته حاوی حداقل ۵۰ مگابایت کد DEX است که بهعنوان اندازه فشردهنشده اندازهگیری میشود
«معیارهای کلیدی Android» اندازه DEX برنامهتان را نمایش میدهد، اما میتوانید این اندازه را بهصورت محلی بااستفاده از خط فرمان نیز اندازهگیری کنید:
unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'
بهینهسازی کد R8 را بهصورت محلی اندازهگیری کنید
اگر برنامهتان با R8 بهینهسازی میشود، میتوانید بهینهسازی، مبهمسازی، و کوچکسازی بسته برنامه را بااستفاده از «تحلیلگر پیکربندی R8» اندازهگیری کنید. گزارش «تحلیلگر پیکربندی R8» نیز در مهارت «تحلیلگر R8» گنجانده شده است. اگرچه این گزارش میتواند به شما کمک کند تا متوجه شوید قوانین نگهداری چگونه بر امتیازهای بهینهسازی، کوچکسازی، و مبهمسازی شما تأثیر میگذارد، درصدهای موجود در گزارش با مقادیر موجود در «معیارهای کلیدی Android» مطابقت نخواهد داشت، زیرا این درصدها قبلاز بهینهسازیها محاسبه میشوند.
برای بازرسی فرادادههای دقیقی که «معیارهای کلیدی Android» برای محاسبه امتیازهایتان استفاده میکند،
فایل r8.json را از بسته برنامهتان استخراج کنید:
unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json
برطرف کردن مشکل
برای رسیدگی به امتیازهای پایین بهینهسازی کد DEX، توصیههای مبتنی بر سیستم ساخت و بهینهساز خود را بررسی کنید:
افزایه Android Gradle و R8
برای بهبود امتیازهای بهینهسازی کد R8 DEX، راهنماییهای موجود در بهبود بهینهسازی R8 را ببینید. همچنین میتوانید از مهارت «تحلیلگر R8» برای دریافت راهنماییهای بیشتر درباره بهینهسازی قوانین نگهداری برنامهتان استفاده کنید.
سیستمهای ساخت غیر R8 و پسپردازندههای DEX
اگر خط لوله ساخت شما از ابزارهای ساخت سفارشی یا پردازشگرهای پساز DEX ثانویه استفاده میکند، مراحل زیر را برای بهبود بهینهسازی برنامه خود انجام دهید:
- بسته برنامهتان را در Android Studio باز کنید و آن را در APK Analyzer مشاهده کنید.
- همه
.dexفایل را انتخاب کنید. - با روشن/خاموش کردن دکمه «شفافسازی نامها» (توجه: این کار مستلزم بارگذاری فایل
mapping.txtاست)، به فایلهای با بزرگترین اندازه توجه ویژه داشته باشید. اگر متوجه شدید برخیاز آن فایلها پساز مبهمسازی همچنان بزرگ هستند، احتمالاً تحتتأثیر قوانین نگهداری در سطح بسته قرار دارند. - یا در فایل
proguard-rules.pro،configuration.txt، یا معادل آن برای بهینهساز خودتان (اگر از R8 استفاده نمیکنید) بهدنبال قوانین نگهداری باشید که با بستههایی که مبهمسازی نمیشوند مطابقت داشته باشد. برای مثال، اگرcom.foo.بسته بزرگی در dex شما است، بهدنبال قوانین نگهداری با قالب-keep com.foo.**یا-keep com.foo.bar.**بگردید. - بهخاطر داشته باشید که قوانین نگهداری مصرفکننده کتابخانه ممکن است بهراحتی قابل شناسایی نباشند. اگر گمان میکنید قانون مصرفکننده کتابخانه بر بهینهسازی تأثیر میگذارد، میتوانید با افزودن آن به برنامه نمونه مستقل بااستفاده از نسخه جدید «افزایه Google برای Gradle» آن را بهصورت محلی اعتبارسنجی کنید و با R8 Configuration Analyzer آن را بازرسی کنید.