ایجاد نمایه های راه اندازی

نمایه‌های راه‌اندازی زیرمجموعه‌ای از پروفایل‌های پایه هستند. نمایه‌های راه‌اندازی توسط سیستم ساخت برای بهینه‌سازی بیشتر کلاس‌ها و روش‌های موجود در آنها با بهبود طرح‌بندی کد در فایل‌های DEX APK شما استفاده می‌شود. با نمایه های راه اندازی، راه اندازی برنامه شما معمولاً بین 15 تا 30 درصد سریع تر از نمایه های پایه به تنهایی است.

شکل 1. بهبود محل کد از بهینه سازی طرح بندی DEX.

الزامات

توصیه می کنیم از Startup Profiles با ابزارهای زیر استفاده کنید:

  • Jetpack Macrobenchmark 1.2.0 یا بالاتر
  • پلاگین Android Gradle 8.2 یا بالاتر
  • Android Studio Iguana یا بالاتر

علاوه بر این، به تنظیمات زیر در برنامه خود نیاز دارید:

  • R8 فعال است. برای ساخت نسخه خود، isMinifyEnabled = true را تنظیم کنید.
  • بهینه سازی طرح بندی DEX فعال شد. در بلوک baselineProfile {} از فایل ساخت ماژول برنامه، dexLayoutOptimization = true تنظیم کنید.

یک نمایه راه اندازی ایجاد کنید

وقتی از الگوی پیش‌فرض تولیدکننده نمایه خط پایه استفاده می‌کنید، Android Studio یک نمایه راه‌اندازی در کنار یک نمایه خط پایه ایجاد می‌کند.

مراحل کلی ایجاد و ایجاد نمایه راه اندازی همانند مراحل ایجاد نمایه پایه است.

راه پیش‌فرض برای ایجاد نمایه راه‌اندازی، استفاده از الگوی ماژول Baseline Profile Generator از داخل Android Studio است. این شامل تعاملات راه اندازی است که یک نمایه اولیه راه اندازی را تشکیل می دهد. برای تقویت این نمایه راه‌اندازی با سفرهای کاربر حیاتی (CUJ)، CUJ‌های راه‌اندازی برنامه‌تان را به یک بلوک rule اضافه کنید که includeInStartupProfile روی true تنظیم شده است. برای برنامه های ساده، راه اندازی MainActivity برنامه ممکن است کافی باشد. برای برنامه‌های پیچیده‌تر، رایج‌ترین نقاط ورود را به برنامه خود اضافه کنید، مانند راه‌اندازی برنامه از صفحه اصلی یا راه‌اندازی به یک پیوند عمیق .

قطعه کد زیر یک تولید کننده نمایه پایه (به طور پیش فرض فایل BaselineProfileGenerator.kt ) را نشان می دهد که شامل شروع برنامه شما از صفحه اصلی و راه اندازی به یک پیوند عمیق است. پیوند عمیق مستقیماً به فید اخبار برنامه می رود، نه صفحه اصلی برنامه.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

برای پیکربندی برنامه، Generate Baseline Profile را اجرا کنید و قوانین نمایه راه اندازی را در src/<variant>/generated/baselineProfiles/startup-prof.txt بیابید.

بهینه سازی نمایه های راه اندازی را تأیید کنید

برای تأیید بهینه‌سازی طرح‌بندی DEX، از Android Studio برای باز کردن APK و تأیید کلاس‌های موجود در فایل‌های DEX استفاده کنید. مطمئن شوید classes.dex اولیه کاملاً پر نشده باشد. اگر برنامه شما از یک فایل DEX تشکیل شده است، می توانید پس از فعال کردن نمایه راه اندازی بررسی کنید که آیا برنامه دارای دو فایل DEX است یا خیر.

اگر کلاس‌های راه‌اندازی در یک فایل DEX قرار نگیرند، Android Studio به شما هشدار می‌دهد. برای دریافت اطلاعات تشخیصی که شامل تعداد روش‌های غیرراه‌اندازی در کلاس‌های راه‌اندازی می‌شود، مطمئن شوید که کامپایلر R8 به حداقل نسخه 8.3.36-dev با اعمال تغییرات زیر در فایل settings.gradle هنگام اعمال Startup به‌روزرسانی شده است. نمایه:

کاتلین

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

شیار

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

هنگام ساخت با Gradle مطمئن شوید که --info بعد از assembleRelease در دستور زیر اضافه کنید.

./gradlew assembleRelease --info

سپس عیب یابی در ترمینال چاپ می شود.

اگر برنامه شما یا هر کتابخانه‌ای به هر API حذف‌شده‌ای اشاره می‌کند، پیاده‌سازی‌های سازگاری همراه این کلاس‌ها همیشه در آخرین فایل DEX موجود است. این آخرین فایل DEX قندزدایی شده در بهینه سازی طرح بندی DEX شرکت نمی کند.

ملاحظات ایجاد نمایه های راه اندازی

خروجی کلاس‌ها و روش‌های نمایه راه‌اندازی به اندازه فایل classes.dex اول محدود می‌شود. این بدان معنی است که همه سفرهای نمایه پایه نباید سفرهای نمایه راه اندازی نیز باشند.

برای تصمیم گیری در مورد سفرهای کاربر هنگام ایجاد نمایه راه اندازی، در نظر بگیرید که اکثر کاربران برنامه را از کجا شروع می کنند. معمولاً از راه‌انداز و پس از ورود آنها به سیستم می‌آید. این نیز ابتدایی‌ترین سفر نمایه خط پایه است.

پس از پوشش اولین مورد استفاده، قیف کاربر را برای راه اندازی برنامه دنبال کنید. در بسیاری از موارد، قیف‌های راه‌اندازی اپلیکیشن از این فهرست پیروی می‌کنند:

  1. فعالیت اصلی پرتاب کننده
  2. اعلان‌هایی که راه‌اندازی برنامه را آغاز می‌کنند
  3. فعالیت های پرتاب اختیاری

این لیست را از بالا کار کنید و قبل از پر شدن classes.dex متوقف شوید. برای پوشش سفرهای بیشتر پس از آن، کد را از مسیر راه اندازی خارج کنید و سفرهای بیشتری اضافه کنید. برای انتقال کد به خارج از مسیر راه‌اندازی، Traces Perfetto را در حین راه‌اندازی برنامه بررسی کنید و به دنبال عملیات طولانی‌مدت باشید. همچنین می‌توانید از یک ماکرو بنچمارک با فعال کردن ردیابی روش برای نمایش خودکار و کامل تماس‌های روش در هنگام راه‌اندازی برنامه استفاده کنید.

{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}