بهینهسازی کد DEX یکی از یافتههای «معیارهای کلیدی Android» است که به شما کمک میکند کیفیت، اندازه، و عملکرد کامپایل برنامهتان را پایش و بهبود دهید. بهینهسازی و مبهمسازی کد بااستفاده از R8 یا ابزارهای جایگزین (مثل بهینهسازهای سازگار با ProGuard یا پسپردازندههای DEX ثانویه) اندازه DEX برنامه را کاهش میدهد، عملکرد زمان اجرا را بهبود میبخشد، و ردپای حافظه آن را به حداقل میرساند.
فایلهای DEX یا Dalvik Executable حاوی کد کامپایلشدهای هستند که برای اجرای برنامهتان استفاده میشود. این فایلها معمولاً شامل کد Java و Kotlin هستند، برخلاف کد کامپایلشده C++ یا فایلهای .so.
«معیارهای کلیدی Android» سنجههای بهینهسازی کد DEX را برای همه برنامهها و بازیها گزارش میکند، اما آستانهها را فقط برای برنامهها و بازیهایی اعمال میکند که الزامات اندازه خاصی را برآورده میکنند.
شناسایی مشکل
وقتی سطوح بهینهسازی، کوچکسازی، یا مبهمسازی کد DEX برنامهتان حداقل درصدهای تعریفشده را برآورده نکند، «معیارهای کلیدی Android» میتواند در «کنسول Play» به شما هشدار دهد.
نحوه محاسبه امتیازهای بهینهسازی
برای برنامههایی که با جدیدترین نسخه وصله AGP 8.10 یا بالاتر ساخته شدهاند (برای مثال،
8.10.1 بهجای 8.10.0)، این درصدها از فایل
r8.json گنجاندهشده گرفته میشود. مطمئن شوید که از جدیدترین نسخه وصله AGP و R8 برای
نسخه جزئیتان استفاده میکنید تا فراداده دقیق تولید شود.
برای برنامههایی که با نسخههای قبلی AGP ساخته شدهاند، یا برنامههایی که با
بهینهساز کد جایگزین بهینهسازی شدهاند و r8.json در آنها گنجانده نشده است، «معیارهای کلیدی Android»
درصد مبهمسازی را بهعنوان پروکسی بااستفاده از فایل mapping.txt (درصورت
گنجانده شدن) یا اکتشاف DEX تخمین میزند.
حداقل اندازه کل DEX
درحالیکه «معیارهای کلیدی Android» معیارهای بهینهسازی کد را برای همه برنامهها محاسبه میکند، فقط درصورتی هشدار دریافت خواهید کرد که دسته برنامهتان الزامات اندازه 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 مشاهده کنید.
- همه
.dexفایل را انتخاب کنید. - وقتی دکمه «ابهامزدایی نامها» را روشن/خاموش میکنید، به فایلهایی که بزرگترین اندازه را دارند توجه کنید (توجه: این کار مستلزم آن است که
فایل
mapping.txtرا بار کنید). اگر متوجه شدید برخیاز این فایلها پساز مبهمسازی همچنان بزرگ هستند، احتمالاً تحتتأثیر قوانین نگهداری سراسری بسته قرار گرفتهاند. - اگر از R8 استفاده نمیکنید، در فایل
proguard-rules.pro،configuration.txt، یا معادل آن برای بهینهسازتان نگاه کنید و قوانین keep را که با بستههایی که مبهمسازی نمیشوند مطابقت دارند جستجو کنید. برای مثال، اگرcom.foo.بسته بزرگی در فایلهای DEX شما است، بهدنبال قوانین نگهداری با قالب-keep com.foo.**یا-keep com.foo.bar.**بگردید. - بهخاطر داشته باشید که شناسایی قوانین نگهداری مصرفکننده کتابخانه ممکن است چندان ساده نباشد. اگر مشکوک هستید که قانون مصرفکننده کتابخانه بر بهینهسازی تأثیر میگذارد،
میتوانید کتابخانه را مستقیماً بااستفاده از
android analyze <library>.aarبازرسی کنید، یا با افزودن کتابخانه به برنامه نمونه مستقل بااستفاده از نسخه اخیر AGP و بازرسی آن با R8 Configuration Analyzer، آن را اعتبارسنجی کنید.