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

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

شکل 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 شرکت نمی کند.

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