برای بهترین تجربه کاربری، باید برنامه خود را بهینه کنید تا تا حد امکان کوچک و سریع شود. بهینهساز برنامه ما، که R8 نام دارد، با حذف کدها و منابع بلااستفاده، بازنویسی کد برای بهینهسازی عملکرد زمان اجرا و موارد دیگر، برنامه شما را ساده میکند. برای کاربران شما، این به معنای:
- زمان راهاندازی سریعتر
- بهبود عملکرد رندر و زمان اجرا
- تعداد کمتر ANR
برای فعال کردن بهینهسازی برنامه، همانطور که در کد زیر نشان داده شده است، در اسکریپت ساخت سطح برنامه نسخه آزمایشی خود isMinifyEnabled = true (برای بهینهسازی کد) و isShrinkResources = true (برای بهینهسازی منابع) را تنظیم کنید. توصیه میکنیم همیشه هر دو تنظیم را فعال کنید. همچنین توصیه میکنیم بهینهسازی برنامه را فقط در نسخه نهایی برنامه خود که قبل از انتشار آزمایش میکنید - معمولاً نسخه آزمایشی شما - فعال کنید، زیرا بهینهسازیها زمان ساخت پروژه شما را افزایش میدهند و میتوانند به دلیل نحوه تغییر کد، اشکالزدایی را سختتر کنند.
کاتلین
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
گرووی
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
بهینهسازی کاهش منابع برای برنامههای حتی کوچکتر
نسخه ۸.۱۲.۰ افزونه اندروید گریدل (AGP) قابلیت بهینهسازی کاهش منابع را معرفی میکند که هدف آن ادغام بهینهسازی منابع و کد برای ایجاد برنامههای کوچکتر و سریعتر است.
فعال کردن کاهش بهینه منابع
برای فعال کردن خط لوله جدید بهینهسازیشده برای کاهش منابع برای نسخههای قبل از ۹.۰.۰ از AGP، موارد زیر را به فایل gradle.properties پروژه خود اضافه کنید:
android.r8.optimizedResourceShrinking=true
اگر از AGP 9.0.0 یا نسخه جدیدتر استفاده میکنید، نیازی به تنظیم android.r8.optimizedResourceShrinking=true ندارید. کاهش بهینه منابع به طور خودکار زمانی اعمال میشود که isShrinkResources = true در پیکربندی ساخت شما فعال باشد.
تنظیمات بهینهسازی R8 را تأیید و پیکربندی کنید
برای اینکه R8 بتواند از تمام قابلیتهای بهینهسازی خود استفاده کند، در صورت وجود، خط زیر را از فایل gradle.properties پروژه خود حذف کنید:
android.enableR8.fullMode=false # Remove this line from your codebase.
توجه داشته باشید که فعال کردن بهینهسازی برنامه، درک ردپاهای پشته را دشوار میکند، به خصوص اگر R8 نام کلاسها یا متدها را تغییر دهد. برای دریافت ردپاهای پشتهای که به درستی با کد منبع شما مطابقت دارند، به بازیابی ردپاهای پشته اصلی مراجعه کنید.
اگر R8 فعال باشد، باید برای عملکرد بهتر در هنگام راهاندازی، پروفایلهای راهاندازی (Startup Profiles) نیز ایجاد کنید .
اگر بهینهسازی برنامه را فعال کردهاید و باعث ایجاد خطا میشود، در اینجا چند راهکار برای رفع آنها آورده شده است:
- برای اینکه بعضی از کدها دست نخورده باقی بمانند ، قوانین keep را اضافه کنید .
- بهینهسازیها را به صورت تدریجی اتخاذ کنید .
- کد خود را بهروزرسانی کنید تا از کتابخانههایی استفاده کنید که برای بهینهسازی مناسبتر هستند .
اگر به بهینهسازی سرعت ساخت خود علاقهمند هستید، برای کسب اطلاعات در مورد نحوه پیکربندی R8 بر اساس محیط خود، به پیکربندی نحوه اجرای R8 مراجعه کنید.
تغییرات رفتاری نسخههای AGP و R8
جدول زیر ویژگیهای کلیدی معرفیشده در نسخههای مختلف افزونهی گریدل اندروید (AGP) و کامپایلر R8 را شرح میدهد.
| نسخه AGP | ویژگیهای معرفی شده |
|---|---|
| ۹.۰ | کوچکسازی بهینه منابع: به طور پیشفرض فعال است (با استفاده از android.r8.optimizedResourceShrinking کنترل میشود). کوچکسازی بهینه منابع به ادغام کوچکسازی منابع با خط لوله بهینهسازی کد کمک میکند و منجر به برنامههای کوچکتر و سریعتر میشود. با بهینهسازی همزمان ارجاعات کد و منبع، منابعی را که منحصراً از کد استفاده نشده ارجاع داده میشوند، شناسایی و حذف میکند. این یک پیشرفت قابل توجه نسبت به فرآیندهای بهینهسازی جداگانه قبلی است.این امر به ویژه برای برنامههایی که منابع و کدهای قابل توجهی را در سطوح مختلف فرم فاکتور به اشتراک میگذارند، مفید است و با بهبود اندازهگیری شده بیش از ۵۰٪ در اندازه برنامه، همراه است. کاهش اندازه حاصل منجر به دانلودهای کمتر، نصب سریعتر و تجربه کاربری بهتر با راهاندازی سریعتر، رندر بهبود یافته و ANR کمتر میشود. فیلتر کردن قوانین کتابخانه: پشتیبانی از گزینههای سراسری (برای مثال، -dontobfuscate ) در قوانین مصرفکننده کتابخانه حذف شده است و برنامهها آنها را فیلتر میکنند. برای اطلاعات بیشتر، به افزودن گزینههای سراسری مراجعه کنید.بررسیهای تهی کاتلین: به طور پیشفرض بهینه شده است (با استفاده از -processkotlinnullchecks کنترل میشود). این نسخه همچنین پیشرفتهای قابل توجهی در سرعت ساخت ارائه داده است. برای اطلاعات بیشتر، به گزینههای سراسری برای بهینهسازی بیشتر مراجعه کنید.بهینهسازی بستههای خاص: میتوانید packageScope برای بهینهسازی بستههای خاص استفاده کنید. این در حال حاضر در مرحله آزمایشی است. برای اطلاعات بیشتر، به Optimize specified packages with packageScope مراجعه کنید.بهینهسازی پیشفرض: پشتیبانی از getDefaultProguardFile("proguard-android.txt") حذف شده است، زیرا شامل -dontoptimize میشود که باید از آن اجتناب شود. در عوض، از "proguard-android-optimize.txt" استفاده کنید. اگر نیاز دارید بهینهسازی را به صورت کلی در برنامه خود غیرفعال کنید، این پرچم را به صورت دستی به یک فایل proguard اضافه کنید . |
| ۸.۱۲ | کاهش منابع: پشتیبانی اولیه اضافه شده است (به طور پیشفرض غیرفعال است. با استفاده از isShrinkResources فعال کنید). کاهش منابع به طور همزمان با R8 کار میکند تا منابع بلااستفاده را به طور مؤثر شناسایی و حذف کند.ردیابی مجدد Logcat: پشتیبانی از ردیابی مجدد خودکار در پنجره Logcat اندروید استودیو. |
| ۸.۶ | ردیابی بهبود یافته: شامل ردیابی نام فایل و شماره خط به طور پیشفرض برای تمام سطوح minSdk است (قبلاً در نسخه ۸.۲، minSdk 26+ مورد نیاز بود).بهروزرسانی R8 به اطمینان از خوانایی آسان و واضح ردگیریهای پشته از نسخههای مبهمسازیشده کمک میکند. این نسخه نحوه نگاشت شماره خطوط و فایلهای منبع را بهبود میبخشد و ردیابی خودکار خرابیها به کد منبع اصلی را برای ابزارهایی مانند Android Studio Logcat آسانتر میکند. |
| ۸.۰ | حالت کامل پیشفرض: حالت کامل R8 بهینهسازی بسیار قدرتمندتری را ارائه میدهد. این حالت به طور پیشفرض فعال است. میتوانید با استفاده از android.enableR8.fullMode=false آن را غیرفعال کنید. |
| ۷.۰ | حالت کامل در دسترس است: به عنوان یک ویژگی اختیاری با استفاده از android.enableR8.fullMode=true معرفی شده است. حالت کامل با در نظر گرفتن فرضیات سختگیرانهتر در مورد نحوه استفاده کد شما از بازتاب و سایر ویژگیهای پویا، بهینهسازیهای قدرتمندتری را اعمال میکند. در حالی که اندازه برنامه را کاهش داده و عملکرد را بهبود میبخشد، ممکن است به قوانین نگهداری اضافی برای جلوگیری از حذف کدهای لازم نیاز داشته باشد. |