نمایههای راهاندازی زیرمجموعهای از پروفایلهای پایه هستند. نمایههای راهاندازی توسط سیستم ساخت برای بهینهسازی بیشتر کلاسها و روشهای موجود در آنها با بهبود طرحبندی کد در فایلهای DEX APK شما استفاده میشود. با نمایههای راهاندازی، راهاندازی برنامه شما تا ۱۵ درصد سریعتر از نمایههای پایه به تنهایی است.
![](https://developer.android.com/static/topic/performance/images/dex-layout-optimizations.png?authuser=4&hl=fa)
الزامات
توصیه می کنیم از 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 شرکت نمی کند.
{% کلمه به کلمه %}برای شما توصیه می شود
- توجه: وقتی جاوا اسکریپت خاموش است، متن پیوند نمایش داده می شود
- ایجاد نمایه های پایه {:#creating-profile-rules}
- نمایه های پایه {:#baseline-profiles}
- نوشتن یک Microbenchmark