بهینه‌سازی بسته‌های مشخص‌شده با packageScope (آزمایشی)

شما می‌توانید بسته‌های خاصی را با استفاده از R8 به همراه packageScope بهینه‌سازی کنید. این به عنوان یک گام اولیه اختیاری برای برنامه‌هایی که هنوز از R8 استفاده نمی‌کنند طراحی شده است و برای برنامه‌هایی که از قبل از R8 استفاده می‌کنند توصیه نمی‌شود.

در نظر بگیرید که آیا packageScope استفاده کنید یا خیر

اگر برنامه شما از قبل از R8 استفاده می‌کند، packageScope استفاده نکنید، زیرا از نظر عملکرد و اندازه برنامه، پیکربندی نامطلوبی دارد. در عوض، پیکربندی R8 برنامه خود را با بهبود قوانین keep یا در صورت استفاده از حالت سازگاری، با مهاجرت به حالت کامل R8، بهبود بخشید.

برای برنامه‌هایی که هنوز از R8 استفاده نمی‌کنند، اما در حال پذیرش آن هستند، packageScope برای مدیریت تدریجی انتقال استفاده کنید. از آنجا که R8 بهینه‌سازی‌های قدرتمندی را اعمال می‌کند که می‌تواند رفتار برنامه را تغییر دهد، محدود کردن این بهینه‌سازی‌ها به بسته‌های خاصی که بهینه‌سازی آنها ایمن است - مانند AndroidX و Kotlin - به شما امکان می‌دهد با حداقل ریسک، افزایش عملکرد را مشاهده کنید. پس از پایدار شدن برنامه، می‌توانید به تدریج این بهینه‌سازی‌ها را به بقیه کدبیس و وابستگی‌های خود گسترش دهید و در هر مرحله پایداری را آزمایش کنید.

پیش‌نیازها

استفاده از R8 به همراه packageScope نیازمند افزونه‌ی اندروید Gradle نسخه ۹.۰ یا بالاتر است.

پیکربندی بهینه‌سازی

برای فعال کردن بهینه‌سازی با packageScope ، مراحل زیر را انجام دهید.

انتخاب کتابخانه‌ها برای بهینه‌سازی

کتابخانه‌هایی را که باید بهینه‌سازی شوند شناسایی کنید. توصیه می‌کنیم با کتابخانه‌های AndroidX و Kotlin androidx.** ، kotlin.** و kotlinx.** شروع کنید، زیرا این‌ها کتابخانه‌های پایداری هستند که برای سازگاری با R8 پیکربندی شده‌اند.

فعال کردن پشتیبانی برای استفاده از R8 با packageScope

موارد زیر را به فایل gradle.properties پروژه خود اضافه کنید:

android.r8.gradual.support=true

بلوک بهینه‌سازی را تنظیم کنید

در فایل build.gradle.kts (یا build.gradle ) در سطح ماژول، یک بلوک optimization به پیکربندی ساخت نسخه خود اضافه کنید. درون این بلوک، از packageScope برای فهرست کردن بسته‌های خاصی که می‌خواهید بهینه‌سازی کنید استفاده کنید. در فایل build.gradle.kts ، لیست بسته‌های خود را در setOf() قرار دهید.

کاتلین

android {
  buildTypes {
    release {
      proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro")
      optimization {
        enable = true
        packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
      }
    }
  }
}

گرووی

android {
  buildTypes {
    release {
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      optimization {
        enable = true
        packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
      }
    }
  }
}

بهینه‌سازی را آزمایش کنید

پس از اعمال یا به‌روزرسانی اعلان packageScope ، برنامه خود را به‌طور کامل آزمایش کنید تا تأیید کنید که هیچ خرابی یا تغییر رفتاری غیرمنتظره‌ای رخ نداده است.

گذار از بهینه‌سازی بسته‌های مشخص‌شده به بهینه‌سازی کل برنامه شما

برای به حداکثر رساندن مزایای بهینه‌سازی، باید به تدریج در کل برنامه خود از استفاده از packageScope به استفاده از R8 روی آورید. این فرآیند شامل گسترش تدریجی پوشش بهینه‌سازی شما می‌شود:

  1. با کتابخانه‌های پایدار شروع کنید . در ابتدا، فقط کتابخانه‌های پایدار و پرکاربردی را که با بهینه‌سازی‌های R8 سازگار هستند، در لیست packageScope قرار دهید. با کتابخانه‌های AndroidX و Kotlin شروع کنید androidx.** ، kotlin.** و kotlinx.** .
  2. بسته‌ها را به تدریج اضافه کنید . پیشوندهای بسته جدید را به تدریج به packageScope اضافه کنید:
    1. وابستگی‌ها را ارزیابی کنید . کتابخانه‌های برنامه خود را بررسی کنید. گزینه‌های خوب برای اضافه کردن به لیست packageScope شامل کتابخانه‌های رسمی گوگل (به عنوان مثال، com.google.** ) و سایر کتابخانه‌های قوی مانند OkHttp (به عنوان مثال، okhttp3.** و okio.** ) هستند. کتابخانه‌هایی را در اولویت قرار دهید که شامل reflection سنگین، serialization یا فراخوانی‌های کد native (JNI) نباشند.
    2. بر اساس اندازه بسته اولویت‌بندی کنید . از تحلیلگر APK اندروید استودیو برای شناسایی بزرگترین عوامل مؤثر در حجم برنامه خود استفاده کنید. ۱. یک نسخه AAB یا APK با R8 خاموش بسازید. ۱. آن را در تحلیلگر باز کنید و فایل‌های dex را بررسی کنید. ۱. بسته‌ها را بر اساس اندازه مرتب کنید. بزرگترین بسته‌ها بالاترین بازده سرمایه‌گذاری (ROI) را برای بهینه‌سازی ارائه می‌دهند. هدف قرار دادن این موارد در ابتدا، تا زمانی که این کتابخانه‌ها قوانین نگهداری بیش از حد گسترده‌ای نداشته باشند، بیشترین کاهش حجم را در اوایل فرآیند به شما می‌دهد. برای اطلاعات بیشتر به بخش «کتابخانه‌ها را عاقلانه انتخاب کنید» مراجعه کنید.
  3. تغییرات رفتاری را تأیید کنید . پس از افزودن هر پیشوند بسته جدید، آزمایش جامعی انجام دهید تا هرگونه رگرسیون یا رفتارهای غیرمنتظره را شناسایی و برطرف کنید.
  4. بسته‌های برنامه را در آخر اضافه کنید . اگر بسته‌های برنامه شما از reflection زیادی استفاده نمی‌کنند، بسته‌های برنامه را در packageScope قرار دهید و در صورت نیاز، قوانین keep را به تدریج اضافه کنید. اگر بسته‌های برنامه شما از reflection زیادی استفاده می‌کنند، بسته‌ها را در packageScope قرار دهید و قوانین keep در سطح بسته را برای بسته‌های مورد نیاز اضافه کنید. برای اصلاح آنها، قوانین keep را تکرار کنید.
  5. به استفاده از R8 در کل برنامه خود روی بیاورید . پس از اینکه اکثر وابستگی‌های برنامه شما در تعریف packageScope گنجانده شد و برنامه شما پایدار شد، packageScope را حذف کنید تا کل برنامه شما در حالت کامل بهینه شود.