ایجاد پروفایل های پایه

با استفاده از کتابخانه Jetpack Macrobenchmark و BaselineProfileRule ، پروفایل‌ها را به‌طور خودکار برای هر نسخه برنامه ایجاد کنید. توصیه می‌کنیم از com.android.tools.build:gradle:8.0.0 یا بالاتر استفاده کنید، که در هنگام استفاده از نمایه‌های خط پایه، با پیشرفت‌های ساخت همراه است.

این مراحل کلی برای ایجاد یک نمایه پایه جدید است:

  1. ماژول Baseline Profile را تنظیم کنید.
  2. تست JUnit را تعریف کنید که به تولید پروفایل های پایه کمک می کند.
  3. سفرهای کاربر حیاتی (CUJ) را که می خواهید بهینه کنید اضافه کنید.
  4. نمایه خط پایه را ایجاد کنید.

پس از ایجاد نمایه خط پایه، آن را با استفاده از یک دستگاه فیزیکی برای اندازه گیری بهبود سرعت محک بزنید.

یک نمایه پایه جدید با AGP 8.2 یا بالاتر ایجاد کنید

ساده ترین راه برای ایجاد یک نمایه پایه جدید، استفاده از الگوی ماژول نمایه پایه است که با شروع Android Studio Iguana و افزونه Android Gradle (AGP) 8.2 در دسترس است.

الگوی ماژول Baseline Profile Generator Android Studio ایجاد یک ماژول جدید را برای تولید و محک گذاری نمایه های خط پایه به صورت خودکار انجام می دهد. اجرای الگو بیشتر پیکربندی ساخت، تولید نمایه خط پایه و کد تأیید را ایجاد می کند. این الگو کدی را برای تولید و محک زدن نمایه‌های خط پایه برای اندازه‌گیری راه‌اندازی برنامه ایجاد می‌کند.

ماژول Baseline Profile را تنظیم کنید

برای اجرای قالب ماژول Baseline Profile، مراحل زیر را دنبال کنید:

  1. File > New > New Module را انتخاب کنید
  2. قالب Baseline Profile Generator را در پانل Templates انتخاب کرده و آن را پیکربندی کنید:
    شکل 1. الگوی ماژول ژنراتور پروفایل پایه.

    فیلدهای قالب به شرح زیر است:

    • برنامه هدف : مشخص می کند که نمایه خط پایه برای کدام برنامه تولید می شود. وقتی فقط یک ماژول اپلیکیشن در پروژه خود دارید، تنها یک مورد در این لیست وجود دارد.
    • نام ماژول : نامی که برای ماژول Baseline Profile در حال ایجاد می‌خواهید.
    • نام بسته : نام بسته ای که برای ماژول Baseline Profile می خواهید.
    • زبان : چه بخواهید کد تولید شده Kotlin یا Java باشد.
    • زبان پیکربندی ساخت : چه بخواهید از Kotlin Script (KTS) یا Groovy برای اسکریپت های پیکربندی ساخت خود استفاده کنید.
    • از دستگاه با مدیریت Gradle استفاده کنید : آیا از دستگاه های مدیریت شده Gradle برای آزمایش برنامه خود استفاده می کنید.
  3. روی Finish کلیک کنید و ماژول جدید ایجاد می شود. اگر از کنترل منبع استفاده می کنید، ممکن است از شما خواسته شود که فایل های ماژول جدید ایجاد شده را به کنترل منبع اضافه کنید.

ژنراتور Baseline Profile را تعریف کنید

ماژول جدید ایجاد شده شامل تست هایی برای تولید و محک زدن نمایه خط پایه و آزمایش راه اندازی برنامه اولیه است. توصیه می‌کنیم این موارد را تقویت کنید تا شامل CUJ و گردش کار راه‌اندازی پیشرفته باشد. اطمینان حاصل کنید که تست‌های مربوط به راه‌اندازی برنامه در یک بلوک rule قرار دارند و includeInStartupProfile روی true تنظیم شده است. برعکس، برای عملکرد بهینه، مطمئن شوید که تست‌هایی که مربوط به راه‌اندازی برنامه نیستند در نمایه راه‌اندازی گنجانده نشده است. بهینه‌سازی‌های راه‌اندازی برنامه برای تعریف بخش خاصی از نمایه خط پایه به نام نمایه راه‌اندازی استفاده می‌شوند.

اگر این CUJها را خارج از نمایه خط پایه تولید شده و کد محک انتزاعی کنید، به قابلیت نگهداری کمک می کند تا بتوان برای هر دو مورد استفاده قرار داد. این بدان معنی است که تغییرات در CUJ های شما به طور مداوم استفاده می شود.

نمایه Baseline را ایجاد و نصب کنید

الگوی ماژول Baseline Profile یک پیکربندی اجرای جدید برای ایجاد نمایه خط پایه اضافه می کند. اگر از طعم‌های محصول استفاده می‌کنید، Android Studio پیکربندی‌های اجرای چندگانه ایجاد می‌کند تا بتوانید پروفایل‌های پایه جداگانه برای هر طعم ایجاد کنید.

پیکربندی اجرای Generate Baseline Profile.
شکل 2. اجرای این پیکربندی نمایه خط پایه را ایجاد می کند.

هنگامی که پیکربندی اجرای Generate Baseline Profile کامل شد، نمایه خط پایه تولید شده را در فایل src/ variant /generated/baselineProfiles/baseline-prof.txt در ماژولی که در حال نمایه سازی است کپی می کند. گزینه های مختلف یا نوع ساخت انتشار هستند یا یک نوع ساخت که شامل نوع ساخت انتشار است.

نمایه خط پایه تولید شده در اصل در build/outputs ایجاد می شود. مسیر کامل با توجه به نوع یا طعم برنامه در حال نمایه و اینکه آیا از یک دستگاه مدیریت شده توسط Gradle یا یک دستگاه متصل برای پروفایل استفاده می کنید، تعیین می شود. اگر از نام‌های استفاده شده توسط کد و پیکربندی‌های ساخت ایجاد شده توسط الگو استفاده می‌کنید، نمایه خط پایه در build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt ایجاد می‌شود. احتمالاً مجبور نخواهید بود مستقیماً با این نسخه از نمایه خط پایه تولید شده تعامل داشته باشید، مگر اینکه به صورت دستی آن را در ماژول های هدف کپی کنید (توصیه نمی شود).

یک نمایه پایه جدید با AGP 8.1 ایجاد کنید

اگر نمی‌توانید از الگوی ماژول نمایه پایه استفاده کنید، از الگوی ماژول Macrobenchmark و افزونه Baseline Profile Gradle برای ایجاد یک نمایه پایه جدید استفاده کنید. توصیه می کنیم از این ابزارها با Android Studio Giraffe و AGP 8.1 استفاده کنید.

در اینجا مراحل ایجاد یک نمایه پایه جدید با استفاده از الگوی ماژول Macrobenchmark و افزونه Baseline Profile Gradle آمده است:

  1. یک ماژول Macrobenchmark را در پروژه Gradle خود راه اندازی کنید .
  2. یک کلاس جدید به نام BaselineProfileGenerator تعریف کنید:
    class BaselineProfileGenerator {
        @get:Rule
        val baselineProfileRule = BaselineProfileRule()
    
        @Test
        fun startup() = baselineProfileRule.collect(
            packageName = "com.example.app",
            profileBlock = {
                startActivityAndWait()
            }
        )
    }

    مولد می‌تواند شامل تعاملاتی با برنامه شما فراتر از راه‌اندازی برنامه باشد. این به شما امکان می‌دهد عملکرد زمان اجرا برنامه خود را بهینه کنید، مانند پیمایش لیست‌ها، اجرای انیمیشن‌ها و پیمایش در یک Activity . نمونه‌های دیگری از آزمایش‌هایی را ببینید که از @BaselineProfileRule برای بهبود سفرهای حیاتی کاربر استفاده می‌کنند.

  3. افزونه Baseline Profile Gradle را اضافه کنید ( libs.plugins.androidx.baselineprofile ). این افزونه تولید پروفایل های پایه و نگهداری آنها را در آینده آسان تر می کند.

  4. برای ایجاد نمایه خط پایه، وظایف :app:generateBaselineProfile یا :app:generate Variant BaselineProfile Gradle را در ترمینال اجرا کنید.

    ژنراتور را به‌عنوان یک آزمایش ابزاری بر روی یک دستگاه فیزیکی ریشه‌دار، شبیه‌ساز یا دستگاه مدیریت‌شده Gradle اجرا کنید. اگر از یک دستگاه مدیریت شده Gradle استفاده می کنید، aosp به عنوان systemImageSource تنظیم کنید، زیرا برای تولید کننده پروفایل پایه به دسترسی ریشه نیاز دارید.

    در پایان کار تولید، نمایه خط پایه در app/src/ variant /generated/baselineProfiles کپی می‌شود.

یک نمایه پایه جدید بدون الگو ایجاد کنید

توصیه می‌کنیم با استفاده از الگوی ماژول پروفایل پایه آندروید استودیو (ترجیحا) یا الگوی Macrobenchmark یک نمایه پایه ایجاد کنید، اما می‌توانید به تنهایی از افزونه Baseline Profile Gradle نیز استفاده کنید. برای مطالعه بیشتر در مورد پلاگین Baseline Profile Gradle، به پیکربندی نسل نمایه خط پایه خود مراجعه کنید.

در اینجا نحوه ایجاد نمایه پایه با استفاده از افزونه Baseline Profile Gradle به طور مستقیم آورده شده است:

  1. یک ماژول com.android.test جدید ایجاد کنید—مثلاً :baseline-profile .
  2. فایل build.gradle.kts برای :baseline-profile پیکربندی کنید:

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. اطمینان حاصل کنید که targetProjectPath به ماژول :app اشاره می کند.
    3. به صورت اختیاری، یک دستگاه با مدیریت Gradle (GMD) اضافه کنید. در مثال زیر، pixel6Api31 است. اگر مشخص نشده باشد، افزونه از یک دستگاه متصل، شبیه سازی شده یا فیزیکی استفاده می کند.
    4. همانطور که در مثال زیر نشان داده شده است، پیکربندی مورد نظر خود را اعمال کنید.

    کاتلین

    plugins {
        id("com.android.test")
        id("androidx.baselineprofile")
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath = ":app"
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device = "Pixel 6"
                apiLevel = 31
                systemImageSource = "aosp"
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices += "pixel6Api31"
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices = false
    }

    شیار

    plugins {
        id 'com.android.test'
        id 'androidx.baselineprofile'
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath ':app'
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device 'Pixel 6'
                apiLevel 31
                systemImageSource 'aosp'
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices ['pixel6Api31']
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices false
    }
  3. یک تست Baseline Profile در ماژول تست :baseline-profile ایجاد کنید. مثال زیر تستی است که برنامه را راه اندازی می کند و منتظر می ماند تا بیکار شود.

    کاتلین

    class BaselineProfileGenerator {
    
        @get:Rule
        val baselineRule = BaselineProfileRule()
    
        @Test
        fun startupBaselineProfile() {
            baselineRule.collect("com.myapp") {
                startActivityAndWait()
            }
        }
    }

    جاوا

    public class BaselineProfileGenerator {
    
        @Rule
        Public BaselineProfileRule baselineRule = new BaselineProfileRule();
    
        @Test
        Public void startupBaselineProfile() {
            baselineRule.collect(
                "com.myapp",
                (scope -> {
                    scope.startActivityAndWait();
                    Return Unit.INSTANCE;
                })
            )
        }
    }
  4. فایل build.gradle.kts را در ماژول برنامه به‌روزرسانی کنید، برای مثال :app .

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. یک وابستگی baselineProfile به ماژول :baseline-profile اضافه کنید.

    کاتلین

    plugins {
        id("com.android.application")
        id("androidx.baselineprofile")
    }
    
    android {
        // There are no changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile(project(":baseline-profile"))
    }

    شیار

    plugins {
        id 'com.android.application'
        id 'androidx.baselineprofile'
    }
    
    android {
        // No changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile ':baseline-profile'
    }
  5. با اجرای وظایف :app:generateBaselineProfile یا :app:generate Variant BaselineProfile Gradle نمایه را ایجاد کنید.

  6. در پایان کار تولید، نمایه خط پایه در app/src/ variant /generated/baselineProfiles کپی می‌شود.

یک نمایه پایه جدید با AGP 7.3-7.4 ایجاد کنید

امکان تولید نمایه های پایه با AGP 7.3-7.4 وجود دارد، اما ما قویاً توصیه می کنیم حداقل به AGP 8.1 ارتقا دهید تا بتوانید از افزونه Baseline Profile Gradle و آخرین ویژگی های آن استفاده کنید.

اگر نیاز به ایجاد نمایه های پایه با AGP 7.3-7.4 دارید، مراحل مشابه مراحل AGP 8.1 است، با استثنائات زیر:

قوانین ایجاد شده را به صورت دستی اعمال کنید

ژنراتور Baseline Profile یک فایل متنی با فرمت قابل خواندن توسط انسان (HRF) روی دستگاه ایجاد می کند و آن را در دستگاه میزبان شما کپی می کند. برای اعمال نمایه تولید شده در کد خود، این مراحل را دنبال کنید:

  1. فایل HRF را در پوشه ساخت ماژولی که نمایه را در آن ایجاد می‌کنید، پیدا کنید: [module]/build/outputs/managed_device_android_test_additional_output/[device] .

    نمایه‌ها از الگوی نام‌گذاری [class name]-[test method name]-baseline-prof.txt پیروی می‌کنند که به شکل زیر است: BaselineProfileGenerator-startup-baseline-prof.txt .

  2. نمایه تولید شده را در src/main/ کپی کنید و نام فایل را به baseline-prof.txt تغییر دهید.

  3. یک وابستگی به کتابخانه ProfileInstaller در فایل build.gradle.kts برنامه خود اضافه کنید تا در جایی که نمایه‌های ابری در دسترس نیستند، کامپایل نمایه خط پایه محلی را فعال کنید. این تنها راه برای بارگذاری یک نمایه پایه به صورت محلی است.

    dependencies {
         implementation("androidx.profileinstaller:profileinstaller:1.4.1")
    }
    
  4. در حالی که قوانین HRF اعمال شده به شکل باینری کامپایل شده و در APK یا AAB گنجانده شده است، نسخه تولیدی برنامه خود را بسازید. سپس برنامه خود را طبق معمول توزیع کنید.

نمایه خط پایه را محک بزنید

برای محک زدن نمایه خط پایه خود، یک پیکربندی جدید اجرای آزمایشی ابزاری Android از عمل ناودان ایجاد کنید که معیارهای تعریف شده در فایل StartupBenchmarks.kt یا StartupBencharks.java اجرا می کند. برای کسب اطلاعات بیشتر در مورد تست معیار، به ایجاد کلاس Macrobenchmark و اندازه‌گیری خودکار با کتابخانه Macrobenchmark مراجعه کنید.

شکل 3. تست های اندروید را از اکشن ناودان اجرا کنید.

هنگامی که این را در Android Studio اجرا می کنید، خروجی ساخت شامل جزئیات بهبود سرعت است که نمایه Baseline ارائه می دهد:

StartupBenchmarks_startupCompilationBaselineProfiles
timeToInitialDisplayMs   min 161.8,   median 178.9,   max 194.6
StartupBenchmarks_startupCompilationNone
timeToInitialDisplayMs   min 184.7,   median 196.9,   max 202.9

تمام مسیرهای کد مورد نیاز را ضبط کنید

دو معیار کلیدی برای اندازه گیری زمان راه اندازی اپلیکیشن به شرح زیر است:

زمان تا نمایش اولیه (TTID)
مدت زمانی که طول می کشد تا اولین فریم از رابط کاربری برنامه نمایش داده شود.
زمان نمایش کامل (TTFD)
TTID به اضافه زمان نمایش محتوایی که پس از نمایش فریم اولیه به صورت ناهمزمان بارگیری می شود.

پس از فراخوانی متد reportFullyDrawn() ComponentActivity ، TTFD گزارش می‌شود. اگر reportFullyDrawn() هرگز فراخوانی نشود، به جای آن TTID گزارش می شود. ممکن است لازم باشد هنگام فراخوانی reportFullyDrawn() تا زمانی که بارگیری ناهمزمان کامل شود، به تاخیر بیاندازید. به عنوان مثال، اگر UI حاوی یک لیست پویا مانند RecyclerView یا لیست تنبل باشد، ممکن است لیست با یک کار پس زمینه پر شود که پس از اولین ترسیم لیست و بنابراین پس از علامت گذاری رابط کاربری به عنوان کاملاً رسم شده تکمیل می شود. در چنین مواردی، کدی که پس از رسیدن رابط کاربری به حالت کاملا ترسیم شده اجرا می‌شود، در نمایه خط پایه گنجانده نمی‌شود.

برای گنجاندن جمعیت لیست به عنوان بخشی از نمایه پایه خود، با استفاده از getFullyDrawnReporter() FullyDrawnReporter دریافت کنید و یک گزارشگر به آن در کد برنامه خود اضافه کنید. پس از تکمیل کار پس‌زمینه، گزارشگر را رها کنید. FullyDrawnReporter متد reportFullyDrawn() را فراخوانی نمی کند تا زمانی که همه گزارشگران آزاد شوند. با انجام این کار، Baseline Profile شامل مسیرهای کد مورد نیاز برای پر کردن لیست می شود. این رفتار برنامه را برای کاربر تغییر نمی‌دهد، اما به نمایه خط پایه اجازه می‌دهد تمام مسیرهای کد لازم را شامل شود.

اگر برنامه شما از Jetpack Compose استفاده می‌کند، از APIهای زیر برای نشان دادن وضعیت کاملاً ترسیم شده استفاده کنید:

  • ReportDrawn نشان می دهد که composable شما بلافاصله برای تعامل آماده است.
  • ReportDrawnWhen یک گزاره مانند list.count > 0 را می گیرد تا نشان دهد که سازنده شما چه زمانی برای تعامل آماده است.
  • ReportDrawnAfter یک روش تعلیق را انتخاب می کند که وقتی کامل شد، نشان می دهد که composable شما برای تعامل آماده است.
{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% endverbatim %}،

با استفاده از کتابخانه Jetpack Macrobenchmark و BaselineProfileRule ، پروفایل‌ها را به‌طور خودکار برای هر نسخه برنامه ایجاد کنید. توصیه می‌کنیم از com.android.tools.build:gradle:8.0.0 یا بالاتر استفاده کنید، که در هنگام استفاده از نمایه‌های خط پایه، با پیشرفت‌های ساخت همراه است.

این مراحل کلی برای ایجاد یک نمایه پایه جدید است:

  1. ماژول Baseline Profile را تنظیم کنید.
  2. تست JUnit را تعریف کنید که به تولید پروفایل های پایه کمک می کند.
  3. سفرهای کاربر حیاتی (CUJ) را که می خواهید بهینه کنید اضافه کنید.
  4. نمایه خط پایه را ایجاد کنید.

پس از ایجاد نمایه خط پایه، آن را با استفاده از یک دستگاه فیزیکی برای اندازه گیری بهبود سرعت محک بزنید.

یک نمایه پایه جدید با AGP 8.2 یا بالاتر ایجاد کنید

ساده ترین راه برای ایجاد یک نمایه پایه جدید، استفاده از الگوی ماژول نمایه پایه است که با شروع Android Studio Iguana و افزونه Android Gradle (AGP) 8.2 در دسترس است.

الگوی ماژول Baseline Profile Generator Android Studio ایجاد یک ماژول جدید را برای تولید و محک گذاری نمایه های خط پایه به صورت خودکار انجام می دهد. اجرای الگو بیشتر پیکربندی ساخت، تولید نمایه خط پایه و کد تأیید را ایجاد می کند. این الگو کدی را برای تولید و محک زدن نمایه‌های خط پایه برای اندازه‌گیری راه‌اندازی برنامه ایجاد می‌کند.

ماژول Baseline Profile را تنظیم کنید

برای اجرای قالب ماژول Baseline Profile، مراحل زیر را دنبال کنید:

  1. File > New > New Module را انتخاب کنید
  2. قالب Baseline Profile Generator را در پانل Templates انتخاب کرده و آن را پیکربندی کنید:
    شکل 1. الگوی ماژول ژنراتور پروفایل پایه.

    فیلدهای قالب به شرح زیر است:

    • برنامه هدف : مشخص می کند که نمایه خط پایه برای کدام برنامه تولید می شود. وقتی فقط یک ماژول اپلیکیشن در پروژه خود دارید، تنها یک مورد در این لیست وجود دارد.
    • نام ماژول : نامی که برای ماژول Baseline Profile در حال ایجاد می‌خواهید.
    • نام بسته : نام بسته ای که برای ماژول Baseline Profile می خواهید.
    • زبان : چه بخواهید کد تولید شده Kotlin یا Java باشد.
    • زبان پیکربندی ساخت : چه بخواهید از Kotlin Script (KTS) یا Groovy برای اسکریپت های پیکربندی ساخت خود استفاده کنید.
    • از دستگاه با مدیریت Gradle استفاده کنید : آیا از دستگاه های مدیریت شده Gradle برای آزمایش برنامه خود استفاده می کنید.
  3. روی Finish کلیک کنید و ماژول جدید ایجاد می شود. اگر از کنترل منبع استفاده می کنید، ممکن است از شما خواسته شود که فایل های ماژول جدید ایجاد شده را به کنترل منبع اضافه کنید.

ژنراتور Baseline Profile را تعریف کنید

ماژول جدید ایجاد شده شامل تست هایی برای تولید و محک زدن نمایه خط پایه و آزمایش راه اندازی برنامه اولیه است. توصیه می‌کنیم این موارد را تقویت کنید تا شامل CUJ و گردش کار راه‌اندازی پیشرفته باشد. اطمینان حاصل کنید که تست‌های مربوط به راه‌اندازی برنامه در یک بلوک rule قرار دارند و includeInStartupProfile روی true تنظیم شده است. برعکس، برای عملکرد بهینه، مطمئن شوید که تست‌هایی که مربوط به راه‌اندازی برنامه نیستند در نمایه راه‌اندازی گنجانده نشده است. بهینه‌سازی‌های راه‌اندازی برنامه برای تعریف بخش خاصی از نمایه خط پایه به نام نمایه راه‌اندازی استفاده می‌شوند.

اگر این CUJها را خارج از نمایه خط پایه تولید شده و کد محک انتزاعی کنید، به قابلیت نگهداری کمک می کند تا بتوان برای هر دو مورد استفاده قرار داد. این بدان معنی است که تغییرات در CUJ های شما به طور مداوم استفاده می شود.

نمایه Baseline را ایجاد و نصب کنید

الگوی ماژول Baseline Profile یک پیکربندی اجرای جدید برای ایجاد نمایه خط پایه اضافه می کند. اگر از طعم‌های محصول استفاده می‌کنید، Android Studio پیکربندی‌های اجرای چندگانه ایجاد می‌کند تا بتوانید پروفایل‌های پایه جداگانه برای هر طعم ایجاد کنید.

پیکربندی اجرای Generate Baseline Profile.
شکل 2. اجرای این پیکربندی نمایه خط پایه را ایجاد می کند.

هنگامی که پیکربندی اجرای Generate Baseline Profile کامل شد، نمایه خط پایه تولید شده را در فایل src/ variant /generated/baselineProfiles/baseline-prof.txt در ماژولی که در حال نمایه سازی است کپی می کند. گزینه های مختلف یا نوع ساخت انتشار هستند یا یک نوع ساخت که شامل نوع ساخت انتشار است.

نمایه خط پایه تولید شده در اصل در build/outputs ایجاد می شود. مسیر کامل با توجه به نوع یا طعم برنامه در حال نمایه و اینکه آیا از یک دستگاه مدیریت شده توسط Gradle یا یک دستگاه متصل برای پروفایل استفاده می کنید، تعیین می شود. اگر از نام‌های استفاده شده توسط کد و پیکربندی‌های ساخت ایجاد شده توسط الگو استفاده می‌کنید، نمایه خط پایه در build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt ایجاد می‌شود. احتمالاً مجبور نخواهید بود مستقیماً با این نسخه از نمایه خط پایه تولید شده تعامل داشته باشید، مگر اینکه به صورت دستی آن را در ماژول های هدف کپی کنید (توصیه نمی شود).

یک نمایه پایه جدید با AGP 8.1 ایجاد کنید

اگر نمی‌توانید از الگوی ماژول نمایه پایه استفاده کنید، از الگوی ماژول Macrobenchmark و افزونه Baseline Profile Gradle برای ایجاد یک نمایه پایه جدید استفاده کنید. توصیه می کنیم از این ابزارها با Android Studio Giraffe و AGP 8.1 استفاده کنید.

در اینجا مراحل ایجاد یک نمایه پایه جدید با استفاده از الگوی ماژول Macrobenchmark و افزونه Baseline Profile Gradle آمده است:

  1. یک ماژول Macrobenchmark را در پروژه Gradle خود راه اندازی کنید .
  2. یک کلاس جدید به نام BaselineProfileGenerator تعریف کنید:
    class BaselineProfileGenerator {
        @get:Rule
        val baselineProfileRule = BaselineProfileRule()
    
        @Test
        fun startup() = baselineProfileRule.collect(
            packageName = "com.example.app",
            profileBlock = {
                startActivityAndWait()
            }
        )
    }

    مولد می‌تواند شامل تعاملاتی با برنامه شما فراتر از راه‌اندازی برنامه باشد. این به شما امکان می‌دهد عملکرد زمان اجرا برنامه خود را بهینه کنید، مانند پیمایش لیست‌ها، اجرای انیمیشن‌ها و پیمایش در یک Activity . نمونه‌های دیگری از آزمایش‌هایی را ببینید که از @BaselineProfileRule برای بهبود سفرهای حیاتی کاربر استفاده می‌کنند.

  3. افزونه Baseline Profile Gradle را اضافه کنید ( libs.plugins.androidx.baselineprofile ). این افزونه تولید پروفایل های پایه و نگهداری آنها را در آینده آسان تر می کند.

  4. برای ایجاد نمایه خط پایه، وظایف :app:generateBaselineProfile یا :app:generate Variant BaselineProfile Gradle را در ترمینال اجرا کنید.

    ژنراتور را به‌عنوان یک آزمایش ابزاری بر روی یک دستگاه فیزیکی ریشه‌دار، شبیه‌ساز یا دستگاه مدیریت‌شده Gradle اجرا کنید. اگر از یک دستگاه مدیریت شده Gradle استفاده می کنید، aosp به عنوان systemImageSource تنظیم کنید، زیرا برای تولید کننده پروفایل پایه به دسترسی ریشه نیاز دارید.

    در پایان کار تولید، نمایه خط پایه در app/src/ variant /generated/baselineProfiles کپی می‌شود.

یک نمایه پایه جدید بدون الگو ایجاد کنید

توصیه می‌کنیم با استفاده از الگوی ماژول پروفایل پایه آندروید استودیو (ترجیحا) یا الگوی Macrobenchmark یک نمایه پایه ایجاد کنید، اما می‌توانید به تنهایی از افزونه Baseline Profile Gradle نیز استفاده کنید. برای مطالعه بیشتر در مورد پلاگین Baseline Profile Gradle، به پیکربندی نسل نمایه خط پایه خود مراجعه کنید.

در اینجا نحوه ایجاد نمایه پایه با استفاده از افزونه Baseline Profile Gradle به طور مستقیم آورده شده است:

  1. یک ماژول com.android.test جدید ایجاد کنید—مثلاً :baseline-profile .
  2. فایل build.gradle.kts برای :baseline-profile پیکربندی کنید:

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. اطمینان حاصل کنید که targetProjectPath به ماژول :app اشاره می کند.
    3. به صورت اختیاری، یک دستگاه با مدیریت Gradle (GMD) اضافه کنید. در مثال زیر، pixel6Api31 است. اگر مشخص نشده باشد، افزونه از یک دستگاه متصل، شبیه سازی شده یا فیزیکی استفاده می کند.
    4. همانطور که در مثال زیر نشان داده شده است، پیکربندی مورد نظر خود را اعمال کنید.

    کاتلین

    plugins {
        id("com.android.test")
        id("androidx.baselineprofile")
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath = ":app"
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device = "Pixel 6"
                apiLevel = 31
                systemImageSource = "aosp"
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices += "pixel6Api31"
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices = false
    }

    شیار

    plugins {
        id 'com.android.test'
        id 'androidx.baselineprofile'
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath ':app'
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device 'Pixel 6'
                apiLevel 31
                systemImageSource 'aosp'
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices ['pixel6Api31']
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices false
    }
  3. یک تست Baseline Profile در ماژول تست :baseline-profile ایجاد کنید. مثال زیر تستی است که برنامه را راه اندازی می کند و منتظر می ماند تا بیکار شود.

    کاتلین

    class BaselineProfileGenerator {
    
        @get:Rule
        val baselineRule = BaselineProfileRule()
    
        @Test
        fun startupBaselineProfile() {
            baselineRule.collect("com.myapp") {
                startActivityAndWait()
            }
        }
    }

    جاوا

    public class BaselineProfileGenerator {
    
        @Rule
        Public BaselineProfileRule baselineRule = new BaselineProfileRule();
    
        @Test
        Public void startupBaselineProfile() {
            baselineRule.collect(
                "com.myapp",
                (scope -> {
                    scope.startActivityAndWait();
                    Return Unit.INSTANCE;
                })
            )
        }
    }
  4. فایل build.gradle.kts را در ماژول برنامه به‌روزرسانی کنید، برای مثال :app .

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. یک وابستگی baselineProfile به ماژول :baseline-profile اضافه کنید.

    کاتلین

    plugins {
        id("com.android.application")
        id("androidx.baselineprofile")
    }
    
    android {
        // There are no changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile(project(":baseline-profile"))
    }

    شیار

    plugins {
        id 'com.android.application'
        id 'androidx.baselineprofile'
    }
    
    android {
        // No changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile ':baseline-profile'
    }
  5. با اجرای وظایف :app:generateBaselineProfile یا :app:generate Variant BaselineProfile Gradle نمایه را ایجاد کنید.

  6. در پایان کار تولید، نمایه خط پایه در app/src/ variant /generated/baselineProfiles کپی می‌شود.

یک نمایه پایه جدید با AGP 7.3-7.4 ایجاد کنید

امکان تولید نمایه های پایه با AGP 7.3-7.4 وجود دارد، اما ما قویاً توصیه می کنیم حداقل به AGP 8.1 ارتقا دهید تا بتوانید از افزونه Baseline Profile Gradle و آخرین ویژگی های آن استفاده کنید.

اگر نیاز به ایجاد نمایه های پایه با AGP 7.3-7.4 دارید، مراحل مشابه مراحل AGP 8.1 است، با استثنائات زیر:

قوانین ایجاد شده را به صورت دستی اعمال کنید

ژنراتور Baseline Profile یک فایل متنی با فرمت قابل خواندن توسط انسان (HRF) روی دستگاه ایجاد می کند و آن را در دستگاه میزبان شما کپی می کند. برای اعمال نمایه تولید شده در کد خود، این مراحل را دنبال کنید:

  1. فایل HRF را در پوشه ساخت ماژولی که نمایه را در آن ایجاد می‌کنید، پیدا کنید: [module]/build/outputs/managed_device_android_test_additional_output/[device] .

    نمایه‌ها از الگوی نام‌گذاری [class name]-[test method name]-baseline-prof.txt پیروی می‌کنند که به شکل زیر است: BaselineProfileGenerator-startup-baseline-prof.txt .

  2. نمایه تولید شده را در src/main/ کپی کنید و نام فایل را به baseline-prof.txt تغییر دهید.

  3. یک وابستگی به کتابخانه ProfileInstaller در فایل build.gradle.kts برنامه خود اضافه کنید تا در جایی که نمایه‌های ابری در دسترس نیستند، کامپایل نمایه خط پایه محلی را فعال کنید. این تنها راه برای بارگذاری یک نمایه پایه به صورت محلی است.

    dependencies {
         implementation("androidx.profileinstaller:profileinstaller:1.4.1")
    }
    
  4. در حالی که قوانین HRF اعمال شده به شکل باینری کامپایل شده و در APK یا AAB گنجانده شده است، نسخه تولیدی برنامه خود را بسازید. سپس برنامه خود را طبق معمول توزیع کنید.

نمایه خط پایه را محک بزنید

برای محک زدن نمایه خط پایه خود، یک پیکربندی جدید اجرای آزمایشی ابزاری Android از عمل ناودان ایجاد کنید که معیارهای تعریف شده در فایل StartupBenchmarks.kt یا StartupBencharks.java اجرا می کند. برای کسب اطلاعات بیشتر در مورد تست معیار، به ایجاد کلاس Macrobenchmark و اندازه‌گیری خودکار با کتابخانه Macrobenchmark مراجعه کنید.

شکل 3. تست های اندروید را از اکشن ناودان اجرا کنید.

هنگامی که این را در Android Studio اجرا می کنید، خروجی ساخت شامل جزئیات بهبود سرعت است که نمایه Baseline ارائه می دهد:

StartupBenchmarks_startupCompilationBaselineProfiles
timeToInitialDisplayMs   min 161.8,   median 178.9,   max 194.6
StartupBenchmarks_startupCompilationNone
timeToInitialDisplayMs   min 184.7,   median 196.9,   max 202.9

تمام مسیرهای کد مورد نیاز را ضبط کنید

دو معیار کلیدی برای اندازه گیری زمان راه اندازی اپلیکیشن به شرح زیر است:

زمان تا نمایش اولیه (TTID)
مدت زمانی که طول می کشد تا اولین فریم از رابط کاربری برنامه نمایش داده شود.
زمان نمایش کامل (TTFD)
TTID به اضافه زمان نمایش محتوایی که پس از نمایش فریم اولیه به صورت ناهمزمان بارگیری می شود.

پس از فراخوانی متد reportFullyDrawn() ComponentActivity ، TTFD گزارش می‌شود. اگر reportFullyDrawn() هرگز فراخوانی نشود، به جای آن TTID گزارش می شود. ممکن است لازم باشد هنگام فراخوانی reportFullyDrawn() تا زمانی که بارگیری ناهمزمان کامل شود، به تاخیر بیاندازید. به عنوان مثال، اگر UI حاوی یک لیست پویا مانند RecyclerView یا لیست تنبل باشد، ممکن است لیست با یک کار پس زمینه پر شود که پس از اولین ترسیم لیست و بنابراین پس از علامت گذاری رابط کاربری به عنوان کاملاً رسم شده تکمیل می شود. در چنین مواردی، کدی که پس از رسیدن رابط کاربری به حالت کاملا ترسیم شده اجرا می‌شود، در نمایه خط پایه گنجانده نمی‌شود.

برای گنجاندن جمعیت لیست به عنوان بخشی از نمایه پایه خود، با استفاده از getFullyDrawnReporter() FullyDrawnReporter دریافت کنید و یک گزارشگر به آن در کد برنامه خود اضافه کنید. پس از تکمیل کار پس‌زمینه، گزارشگر را رها کنید. FullyDrawnReporter متد reportFullyDrawn() را فراخوانی نمی کند تا زمانی که همه گزارشگران آزاد شوند. با انجام این کار، Baseline Profile شامل مسیرهای کد مورد نیاز برای پر کردن لیست می شود. این رفتار برنامه را برای کاربر تغییر نمی‌دهد، اما به نمایه خط پایه اجازه می‌دهد تمام مسیرهای کد لازم را شامل شود.

اگر برنامه شما از Jetpack Compose استفاده می‌کند، از APIهای زیر برای نشان دادن وضعیت کاملاً ترسیم شده استفاده کنید:

  • ReportDrawn نشان می دهد که composable شما بلافاصله برای تعامل آماده است.
  • ReportDrawnWhen یک گزاره مانند list.count > 0 را می گیرد تا نشان دهد که سازنده شما چه زمانی برای تعامل آماده است.
  • ReportDrawnAfter یک روش تعلیق را انتخاب می کند که وقتی کامل شد، نشان می دهد که composable شما برای تعامل آماده است.
{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% endverbatim %}،

با استفاده از کتابخانه Jetpack Macrobenchmark و BaselineProfileRule ، پروفایل‌ها را به‌طور خودکار برای هر نسخه برنامه ایجاد کنید. توصیه می‌کنیم از com.android.tools.build:gradle:8.0.0 یا بالاتر استفاده کنید، که در هنگام استفاده از نمایه‌های خط پایه، با پیشرفت‌های ساخت همراه است.

این مراحل کلی برای ایجاد یک نمایه پایه جدید است:

  1. ماژول Baseline Profile را تنظیم کنید.
  2. تست JUnit را تعریف کنید که به تولید پروفایل های پایه کمک می کند.
  3. سفرهای کاربر حیاتی (CUJ) را که می خواهید بهینه کنید اضافه کنید.
  4. نمایه خط پایه را ایجاد کنید.

پس از ایجاد نمایه خط پایه، آن را با استفاده از یک دستگاه فیزیکی برای اندازه گیری بهبود سرعت محک بزنید.

یک نمایه پایه جدید با AGP 8.2 یا بالاتر ایجاد کنید

ساده ترین راه برای ایجاد یک نمایه پایه جدید، استفاده از الگوی ماژول نمایه پایه است که با شروع Android Studio Iguana و افزونه Android Gradle (AGP) 8.2 در دسترس است.

الگوی ماژول Baseline Profile Generator Android Studio ایجاد یک ماژول جدید را برای تولید و محک گذاری نمایه های خط پایه به صورت خودکار انجام می دهد. اجرای الگو بیشتر پیکربندی ساخت، تولید نمایه خط پایه و کد تأیید را ایجاد می کند. این الگو کدی را برای تولید و محک زدن نمایه‌های خط پایه برای اندازه‌گیری راه‌اندازی برنامه ایجاد می‌کند.

ماژول Baseline Profile را تنظیم کنید

برای اجرای قالب ماژول Baseline Profile، مراحل زیر را دنبال کنید:

  1. File > New > New Module را انتخاب کنید
  2. قالب Baseline Profile Generator را در پانل Templates انتخاب کرده و آن را پیکربندی کنید:
    شکل 1. الگوی ماژول ژنراتور پروفایل پایه.

    فیلدهای قالب به شرح زیر است:

    • برنامه هدف : مشخص می کند که نمایه خط پایه برای کدام برنامه تولید می شود. وقتی فقط یک ماژول اپلیکیشن در پروژه خود دارید، تنها یک مورد در این لیست وجود دارد.
    • نام ماژول : نامی که برای ماژول Baseline Profile در حال ایجاد می‌خواهید.
    • نام بسته : نام بسته ای که برای ماژول Baseline Profile می خواهید.
    • زبان : چه بخواهید کد تولید شده Kotlin یا Java باشد.
    • زبان پیکربندی ساخت : چه بخواهید از Kotlin Script (KTS) یا Groovy برای اسکریپت های پیکربندی ساخت خود استفاده کنید.
    • از دستگاه با مدیریت Gradle استفاده کنید : آیا از دستگاه های مدیریت شده Gradle برای آزمایش برنامه خود استفاده می کنید.
  3. روی Finish کلیک کنید و ماژول جدید ایجاد می شود. اگر از کنترل منبع استفاده می کنید، ممکن است از شما خواسته شود که فایل های ماژول جدید ایجاد شده را به کنترل منبع اضافه کنید.

ژنراتور Baseline Profile را تعریف کنید

ماژول جدید ایجاد شده شامل تست هایی برای تولید و محک زدن نمایه خط پایه و آزمایش راه اندازی برنامه اولیه است. توصیه می‌کنیم این موارد را تقویت کنید تا شامل CUJ و گردش کار راه‌اندازی پیشرفته باشد. اطمینان حاصل کنید که تست‌های مربوط به راه‌اندازی برنامه در یک بلوک rule قرار دارند و includeInStartupProfile روی true تنظیم شده است. برعکس، برای عملکرد بهینه، مطمئن شوید که تست‌هایی که مربوط به راه‌اندازی برنامه نیستند در نمایه راه‌اندازی گنجانده نشده است. بهینه‌سازی‌های راه‌اندازی برنامه برای تعریف بخش خاصی از نمایه خط پایه به نام نمایه راه‌اندازی استفاده می‌شوند.

اگر این CUJها را خارج از نمایه خط پایه تولید شده و کد محک انتزاعی کنید، به قابلیت نگهداری کمک می کند تا بتوان برای هر دو مورد استفاده قرار داد. این بدان معنی است که تغییرات در CUJ های شما به طور مداوم استفاده می شود.

نمایه Baseline را ایجاد و نصب کنید

الگوی ماژول Baseline Profile یک پیکربندی اجرای جدید برای ایجاد نمایه خط پایه اضافه می کند. اگر از طعم‌های محصول استفاده می‌کنید، Android Studio پیکربندی‌های اجرای چندگانه ایجاد می‌کند تا بتوانید پروفایل‌های پایه جداگانه برای هر طعم ایجاد کنید.

پیکربندی اجرای Generate Baseline Profile.
شکل 2. اجرای این پیکربندی نمایه خط پایه را ایجاد می کند.

هنگامی که پیکربندی اجرای Generate Baseline Profile کامل شد، نمایه خط پایه تولید شده را در فایل src/ variant /generated/baselineProfiles/baseline-prof.txt در ماژولی که در حال نمایه سازی است کپی می کند. گزینه های مختلف یا نوع ساخت انتشار هستند یا یک نوع ساخت که شامل نوع ساخت انتشار است.

نمایه خط پایه تولید شده در اصل در build/outputs ایجاد می شود. مسیر کامل با توجه به نوع یا طعم برنامه در حال نمایه و اینکه آیا از یک دستگاه مدیریت شده توسط Gradle یا یک دستگاه متصل برای پروفایل استفاده می کنید، تعیین می شود. اگر از نام‌های استفاده شده توسط کد و پیکربندی‌های ساخت ایجاد شده توسط الگو استفاده می‌کنید، نمایه خط پایه در build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt ایجاد می‌شود. احتمالاً مجبور نخواهید بود مستقیماً با این نسخه از نمایه خط پایه تولید شده تعامل داشته باشید، مگر اینکه به صورت دستی آن را در ماژول های هدف کپی کنید (توصیه نمی شود).

یک نمایه پایه جدید با AGP 8.1 ایجاد کنید

اگر نمی‌توانید از الگوی ماژول نمایه پایه استفاده کنید، از الگوی ماژول Macrobenchmark و افزونه Baseline Profile Gradle برای ایجاد یک نمایه پایه جدید استفاده کنید. توصیه می کنیم از این ابزارها با Android Studio Giraffe و AGP 8.1 استفاده کنید.

در اینجا مراحل ایجاد یک نمایه پایه جدید با استفاده از الگوی ماژول Macrobenchmark و افزونه Baseline Profile Gradle آمده است:

  1. یک ماژول Macrobenchmark را در پروژه Gradle خود راه اندازی کنید .
  2. یک کلاس جدید به نام BaselineProfileGenerator را تعریف کنید:
    class BaselineProfileGenerator {
        @get:Rule
        val baselineProfileRule = BaselineProfileRule()
    
        @Test
        fun startup() = baselineProfileRule.collect(
            packageName = "com.example.app",
            profileBlock = {
                startActivityAndWait()
            }
        )
    }

    ژنراتور می تواند تعامل با برنامه شما فراتر از راه اندازی برنامه باشد. این به شما امکان می دهد عملکرد زمان اجرا برنامه خود را بهینه کنید ، مانند لیست های پیمایش ، انیمیشن های در حال اجرا و پیمایش در یک Activity . نمونه های دیگر آزمایشاتی را که از @BaselineProfileRule استفاده می کنند برای بهبود سفرهای مهم کاربر مشاهده کنید.

  3. افزونه پایه پایه پایه ( libs.plugins.androidx.baselineprofile ) را اضافه کنید. این افزونه تولید پروفایل های پایه و حفظ آنها در آینده را آسان تر می کند.

  4. برای تولید مشخصات پایه ، اجرای :app:generateBaselineProfile یا :app:generate Variant BaselineProfile .

    ژنراتور را به عنوان یک تست ابزار دقیق بر روی یک دستگاه فیزیکی ریشه دار ، شبیه ساز یا دستگاه مدیریت شده Gradle اجرا کنید. اگر از یک دستگاه مدیریت شده Gradle استفاده می کنید ، aosp به عنوان systemImageSource تنظیم کنید ، زیرا برای ژنراتور مشخصات پایه به دسترسی ریشه ای نیاز دارید.

    در پایان کار تولید ، مشخصات پایه در app/src/ variant /generated/baselineProfiles کپی می شود.

یک نمایه پایه جدید بدون الگو ایجاد کنید

توصیه می کنیم با استفاده از الگوی ماژول Profile Profile Baseline Android Studio Baseline (ترجیحی) یا الگوی Macrobenchmark ، یک پروفایل پایه ایجاد کنید ، اما می توانید به خودی خود از افزونه Gradle Profile Profile نیز استفاده کنید. برای مطالعه بیشتر در مورد افزونه پایه پایه پایه ، به پیکربندی نسل مشخصات پایه خود مراجعه کنید.

در اینجا نحوه ایجاد یک پروفایل پایه با استفاده از افزونه Profine Profile Gradle به طور مستقیم آورده شده است:

  1. یک ماژول com.android.test جدید ایجاد کنید-برای مثال ، :baseline-profile .
  2. فایل build.gradle.kts را برای :baseline-profile پیکربندی کنید:

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. اطمینان حاصل کنید که targetProjectPath به ماژول :app :
    3. به صورت اختیاری ، یک دستگاه با مدیریت درجه (GMD) اضافه کنید. در مثال زیر ، pixel6Api31 است. اگر مشخص نشده باشد ، این افزونه از یک دستگاه متصل ، تقلید شده یا فیزیکی استفاده می کند.
    4. همانطور که در مثال زیر نشان داده شده است ، پیکربندی مورد نظر خود را اعمال کنید.

    کاتلین

    plugins {
        id("com.android.test")
        id("androidx.baselineprofile")
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath = ":app"
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device = "Pixel 6"
                apiLevel = 31
                systemImageSource = "aosp"
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices += "pixel6Api31"
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices = false
    }

    شیار

    plugins {
        id 'com.android.test'
        id 'androidx.baselineprofile'
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath ':app'
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device 'Pixel 6'
                apiLevel 31
                systemImageSource 'aosp'
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices ['pixel6Api31']
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices false
    }
  3. یک تست مشخصات پایه را در ماژول تست :baseline-profile ایجاد کنید. مثال زیر آزمایشی است که برنامه را شروع می کند و منتظر بیکار است.

    کاتلین

    class BaselineProfileGenerator {
    
        @get:Rule
        val baselineRule = BaselineProfileRule()
    
        @Test
        fun startupBaselineProfile() {
            baselineRule.collect("com.myapp") {
                startActivityAndWait()
            }
        }
    }

    جاوا

    public class BaselineProfileGenerator {
    
        @Rule
        Public BaselineProfileRule baselineRule = new BaselineProfileRule();
    
        @Test
        Public void startupBaselineProfile() {
            baselineRule.collect(
                "com.myapp",
                (scope -> {
                    scope.startActivityAndWait();
                    Return Unit.INSTANCE;
                })
            )
        }
    }
  4. برای مثال :app پرونده build.gradle.kts را در ماژول برنامه به روز کنید.

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. یک وابستگی baselineProfile به ماژول :baseline-profile اضافه کنید.

    کاتلین

    plugins {
        id("com.android.application")
        id("androidx.baselineprofile")
    }
    
    android {
        // There are no changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile(project(":baseline-profile"))
    }

    شیار

    plugins {
        id 'com.android.application'
        id 'androidx.baselineprofile'
    }
    
    android {
        // No changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile ':baseline-profile'
    }
  5. با اجرای :app:generateBaselineProfile یا :app:generate Variant BaselineProfile .

  6. در پایان کار تولید ، مشخصات پایه در app/src/ variant /generated/baselineProfiles کپی می شود.

با AGP 7.3-7.4 یک پروفایل پایه جدید ایجاد کنید

تولید پروفایل های پایه با AGP 7.3-7.4 امکان پذیر است ، اما ما اکیداً توصیه می کنیم حداقل AGP 8.1 را ارتقا دهید تا بتوانید از افزونه Gradle Profile Profile و آخرین ویژگی های آن استفاده کنید.

اگر نیاز به ایجاد پروفایل های پایه با AGP 7.3-7.4 دارید ، مراحل همان مراحل AGP 8.1 است ، با استثنائات زیر:

به صورت دستی قوانین تولید شده را اعمال کنید

ژنراتور مشخصات پایه یک فایل متنی با فرمت قابل خواندن (HRF) در دستگاه ایجاد می کند و آن را در دستگاه میزبان شما کپی می کند. برای اعمال نمایه تولید شده در کد خود ، این مراحل را دنبال کنید:

  1. فایل HRF را در پوشه ساخت ماژول قرار دهید که نمایه را در: [module]/build/outputs/managed_device_android_test_additional_output/[device] ایجاد می کنید.

    پروفایل ها از [class name]-[test method name]-baseline-prof.txt نامگذاری BaselineProfileGenerator-startup-baseline-prof.txt پیروی می کنند ، که به نظر می رسد:

  2. نمایه تولید شده را در src/main/ و تغییر نام پرونده به baseline-prof.txt کپی کنید.

  3. یک وابستگی به کتابخانه ProfileInstaller در پرونده برنامه خود در پرونده build.gradle.kts اضافه کنید تا بتوانید تدوین مشخصات پایه محلی را که در آن پروفایل های ابر در دسترس نیستند ، فعال کنید. این تنها راه برای کنار گذاشتن پروفایل پایه در محلی است.

    dependencies {
         implementation("androidx.profileinstaller:profileinstaller:1.4.1")
    }
    
  4. نسخه تولید برنامه خود را بسازید در حالی که قوانین کاربردی HRF به صورت باینری گردآوری شده و در APK یا AAB گنجانده شده است. سپس برنامه خود را طبق معمول توزیع کنید.

مشخصات مشخصات پایه

برای معیار مشخصات پایه خود ، یک پیکربندی جدید تست Android Instrumented Run را از عمل Gutter ایجاد کنید که معیارهای تعریف شده در پرونده StartupBenchmarks.kt یا StartupBencharks.java اجرا می کند. برای کسب اطلاعات بیشتر در مورد تست معیار ، به ایجاد یک کلاس ماکروبچارک و اندازه گیری خودکار با کتابخانه ماکروبچارک مراجعه کنید.

شکل 3 تست های اندرویدی را از عمل روده اجرا کنید.

هنگامی که این کار را در Android Studio اجرا می کنید ، خروجی ساخت حاوی جزئیاتی از پیشرفت های سرعت است که مشخصات پایه ارائه می دهد:

StartupBenchmarks_startupCompilationBaselineProfiles
timeToInitialDisplayMs   min 161.8,   median 178.9,   max 194.6
StartupBenchmarks_startupCompilationNone
timeToInitialDisplayMs   min 184.7,   median 196.9,   max 202.9

تمام مسیرهای کد مورد نیاز را ضبط کنید

دو معیار اصلی برای اندازه گیری زمان راه اندازی برنامه به شرح زیر است:

زمان نمایش اولیه (TTID)
زمان لازم برای نمایش اولین قاب UI برنامه.
زمان نمایش کامل (TTFD)
TTID به علاوه زمان نمایش محتوا که پس از نمایش قاب اولیه به صورت ناهمزمان بارگذاری می شود.

TTFD پس از ComponentActivity روش reportFullyDrawn() گزارش شده () گزارش شده است. اگر reportFullyDrawn() هرگز فراخوانی نشود ، به جای آن TTID گزارش می شود. ممکن است لازم باشد که پس از اتمام بارگذاری reportFullyDrawn() تا زمانی که بارگیری ناهمزمان انجام شود. به عنوان مثال ، اگر UI دارای یک لیست پویا مانند یک RecyclerView یا لیست تنبل باشد ، ممکن است این لیست توسط یک کار پس زمینه جمع شود که پس از اولین بار به اتمام می رسد و بنابراین ، پس از مشخص شدن UI به عنوان کاملاً ترسیم شده است. در چنین مواردی ، کدی که پس از رسیدن UI به حالت کاملاً کشیده اجرا می شود ، در مشخصات پایه قرار نمی گیرد.

برای اینکه جمعیت لیست را به عنوان بخشی از مشخصات پایه خود درج کنید ، با استفاده از getFullyDrawnReporter() به FullyDrawnReporter دریافت کرده و یک گزارشگر را در کد برنامه خود اضافه کنید. پس از اتمام کار پس زمینه ، گزارشگر را منتشر کنید. تا زمانی که همه خبرنگاران آزاد نشوند ، روش FullyDrawnReporter با روش reportFullyDrawn() تماس نمی گیرد. با این کار ، مشخصات پایه شامل مسیرهای کد مورد نیاز برای جمع آوری لیست است. این رفتار برنامه را برای کاربر تغییر نمی دهد ، اما به شما امکان می دهد مشخصات پایه شامل تمام مسیرهای کد لازم باشد.

اگر برنامه شما از JetPack Compose استفاده می کند ، از API های زیر استفاده کنید تا حالت کاملاً ترسیم شده را نشان دهید:

  • ReportDrawn نشان می دهد که ترکیب شما بلافاصله برای تعامل آماده است.
  • ReportDrawnWhen یک محمول مانند list.count > 0 را می گیرد تا نشان دهد چه زمانی ترکیب شما برای تعامل آماده است.
  • ReportDrawnAfter یک روش تعلیق را می گیرد که پس از اتمام ، نشان می دهد که ترکیب شما برای تعامل آماده است.
{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {٪ EndverBatim ٪} ،

با استفاده از کتابخانه Macrobenchmark JetPack و BaselineProfileRule به طور خودکار پروفایل هایی را برای هر نسخه برنامه ایجاد کنید. توصیه می کنیم از com.android.tools.build:gradle:8.0.0 یا بالاتر استفاده کنید که در هنگام استفاده از پروفایل های پایه با پیشرفت های ساخت و ساز همراه است.

این مراحل کلی برای ایجاد یک نمایه پایه جدید است:

  1. ماژول مشخصات پایه را تنظیم کنید.
  2. آزمایش Junit را تعریف کنید که به تولید پروفایل های پایه کمک می کند.
  3. سفرهای مهم کاربر (CUJS) را که می خواهید بهینه کنید اضافه کنید.
  4. مشخصات پایه را ایجاد کنید.

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

یک مشخصات پایه جدید با AGP 8.2 یا بالاتر ایجاد کنید

ساده ترین راه برای ایجاد یک نمایه پایه جدید استفاده از الگوی ماژول Profine Profine ، در دسترس استودیو Android Studio Iguana و Android Gradle Plugin (AGP) 8.2 است.

الگوی ماژول پرفروش Profile Profile Android Studio ، ایجاد یک ماژول جدید برای تولید و معیار پروفایل های پایه را خودکار می کند. اجرای این الگو بیشتر پیکربندی ساخت معمولی ، تولید مشخصات پایه و کد تأیید را ایجاد می کند. این الگوی برای اندازه گیری و معیار پایه برای اندازه گیری راه اندازی برنامه ، کد ایجاد می کند.

ماژول پروفایل پایه را تنظیم کنید

برای اجرای الگوی ماژول پروفایل پایه ، این مراحل را دنبال کنید:

  1. پرونده> جدید> ماژول جدید را انتخاب کنید
  2. الگوی ژنراتور نمایه پایه را در پنل Templates انتخاب کرده و آن را پیکربندی کنید:
    شکل 1. الگوی ماژول ژنراتور پروفایل پایه.

    زمینه های موجود در الگوی زیر است:

    • برنامه هدف : مشخص می کند که مشخصات پایه برای کدام برنامه تولید می شود. وقتی فقط یک ماژول برنامه واحد در پروژه خود دارید ، فقط یک مورد در این لیست وجود دارد.
    • نام ماژول : نامی که می خواهید برای ماژول مشخصات پایه ایجاد کنید.
    • نام بسته : نام بسته ای که می خواهید برای ماژول مشخصات پایه.
    • زبان : خواه بخواهید کد تولید شده Kotlin یا Java باشد.
    • ساخت زبان پیکربندی : خواه بخواهید از اسکریپت Kotlin (KTS) استفاده کنید یا برای اسکریپت های پیکربندی ساخت خود.
    • از دستگاه مدیریت درجه بندی استفاده کنید : آیا برای آزمایش برنامه خود از دستگاه های مدیریت شده درجه بندی استفاده می کنید.
  3. روی Finish کلیک کنید و ماژول جدید ایجاد شده است. اگر از Source Control استفاده می کنید ، ممکن است از شما خواسته شود که فایلهای ماژول تازه ایجاد شده را به کنترل منبع اضافه کنید.

ژنراتور نمایه پایه را تعریف کنید

ماژول تازه ایجاد شده شامل آزمایشاتی است که هم تولید و هم معیار مشخصات پایه را ایجاد می کند و فقط راه اندازی برنامه اصلی را آزمایش می کند. ما توصیه می کنیم که این موارد را تقویت کنید تا شامل CUJ ها و گردش کار پیشرفته راه اندازی شود. اطمینان حاصل کنید که هر آزمایش مربوط به راه اندازی APP در یک rule قرار دارد و includeInStartupProfile تنظیم true است. در مقابل ، برای عملکرد بهینه اطمینان حاصل کنید که هر تست مربوط به راه اندازی برنامه در یک پروفایل راه اندازی درج نشده است. بهینه سازی های راه اندازی APP برای تعریف بخش ویژه ای از نمایه پایه به نام یک پروفایل راه اندازی استفاده می شود.

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

نمایه پایه را تولید و نصب کنید

الگوی ماژول پروفایل پایه ، پیکربندی اجرا جدید را برای تولید مشخصات پایه اضافه می کند. اگر از طعم دهنده های محصول استفاده می کنید ، Android Studio چندین تنظیمات اجرا را ایجاد می کند تا بتوانید پروفایل های پایه جداگانه ای را برای هر عطر و طعم تولید کنید.

پیکربندی اجرای پروفایل پایه تولید.
شکل 2. اجرای این پیکربندی مشخصات پایه را ایجاد می کند.

هنگامی که پیکربندی اجرای پروفایل پایه تولیدی تکمیل می شود ، مشخصات پایه تولید شده را به پرونده src/ variant /generated/baselineProfiles/baseline-prof.txt در ماژول ای که پروفایل می شود ، کپی می کند. گزینه های مختلف یا نوع ساخت نسخه یا نوع ساخت و ساز شامل نوع ساخت نسخه است.

مشخصات پایه تولید شده در ابتدا در build/outputs ایجاد می شود. مسیر کامل توسط نوع یا عطر و طعم برنامه که پروفایل می شود و اینکه آیا شما از یک دستگاه با مدیریت درجه یک یا یک دستگاه متصل برای پروفایل استفاده می کنید ، دیکته می شود. اگر از نامهای استفاده شده توسط کد و ساخت پیکربندی های تولید شده توسط الگو استفاده می کنید ، مشخصات پایه در build/outputs/managed_device_android_test_additional_output/nonminifiedrelease/pixel6Api31/BaselineProfileGenerator_generate-baseline-prof.txt ایجاد می شود. احتمالاً نیازی به تعامل با این نسخه از نمایه پایه تولید شده به طور مستقیم نخواهید داشت مگر اینکه به صورت دستی آن را در ماژول های هدف کپی کنید (توصیه نمی شود).

با AGP 8.1 یک پروفایل پایه جدید ایجاد کنید

اگر قادر به استفاده از الگوی ماژول پروفایل پایه نیستید ، از الگوی ماژول Macrobenchmark و افزونه Gradle Profile Profile برای ایجاد یک پروفایل پایه جدید استفاده کنید. توصیه می کنیم از این ابزارها با شروع Android Studio Giraffe و AGP 8.1 استفاده کنید.

در اینجا مراحل ایجاد یک نمایه پایه جدید با استفاده از الگوی ماژول Macrobenchmark و افزونه Gradle Profile Profile:

  1. یک ماژول macrobenchmark را در پروژه Gradle خود تنظیم کنید .
  2. یک کلاس جدید به نام BaselineProfileGenerator را تعریف کنید:
    class BaselineProfileGenerator {
        @get:Rule
        val baselineProfileRule = BaselineProfileRule()
    
        @Test
        fun startup() = baselineProfileRule.collect(
            packageName = "com.example.app",
            profileBlock = {
                startActivityAndWait()
            }
        )
    }

    ژنراتور می تواند تعامل با برنامه شما فراتر از راه اندازی برنامه باشد. این به شما امکان می دهد عملکرد زمان اجرا برنامه خود را بهینه کنید ، مانند لیست های پیمایش ، انیمیشن های در حال اجرا و پیمایش در یک Activity . نمونه های دیگر آزمایشاتی را که از @BaselineProfileRule استفاده می کنند برای بهبود سفرهای مهم کاربر مشاهده کنید.

  3. افزونه پایه پایه پایه ( libs.plugins.androidx.baselineprofile ) را اضافه کنید. این افزونه تولید پروفایل های پایه و حفظ آنها در آینده را آسان تر می کند.

  4. برای تولید مشخصات پایه ، اجرای :app:generateBaselineProfile یا :app:generate Variant BaselineProfile .

    ژنراتور را به عنوان یک تست ابزار دقیق بر روی یک دستگاه فیزیکی ریشه دار ، شبیه ساز یا دستگاه مدیریت شده Gradle اجرا کنید. اگر از یک دستگاه مدیریت شده Gradle استفاده می کنید ، aosp به عنوان systemImageSource تنظیم کنید ، زیرا برای ژنراتور مشخصات پایه به دسترسی ریشه ای نیاز دارید.

    در پایان کار تولید ، مشخصات پایه در app/src/ variant /generated/baselineProfiles کپی می شود.

یک نمایه پایه جدید بدون الگو ایجاد کنید

توصیه می کنیم با استفاده از الگوی ماژول Profile Profile Baseline Android Studio Baseline (ترجیحی) یا الگوی Macrobenchmark ، یک پروفایل پایه ایجاد کنید ، اما می توانید به خودی خود از افزونه Gradle Profile Profile نیز استفاده کنید. برای مطالعه بیشتر در مورد افزونه پایه پایه پایه ، به پیکربندی نسل مشخصات پایه خود مراجعه کنید.

در اینجا نحوه ایجاد یک پروفایل پایه با استفاده از افزونه Profine Profile Gradle به طور مستقیم آورده شده است:

  1. یک ماژول com.android.test جدید ایجاد کنید-برای مثال ، :baseline-profile .
  2. فایل build.gradle.kts را برای :baseline-profile پیکربندی کنید:

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. اطمینان حاصل کنید که targetProjectPath به ماژول :app :
    3. به صورت اختیاری ، یک دستگاه با مدیریت درجه (GMD) اضافه کنید. در مثال زیر ، pixel6Api31 است. اگر مشخص نشده باشد ، این افزونه از یک دستگاه متصل ، تقلید شده یا فیزیکی استفاده می کند.
    4. همانطور که در مثال زیر نشان داده شده است ، پیکربندی مورد نظر خود را اعمال کنید.

    کاتلین

    plugins {
        id("com.android.test")
        id("androidx.baselineprofile")
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath = ":app"
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device = "Pixel 6"
                apiLevel = 31
                systemImageSource = "aosp"
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices += "pixel6Api31"
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices = false
    }

    شیار

    plugins {
        id 'com.android.test'
        id 'androidx.baselineprofile'
    }
    
    android {
        defaultConfig {
            ...
        }
    
        // Point to the app module, the module that you're generating the Baseline Profile for.
        targetProjectPath ':app'
        // Configure a GMD (optional).
        testOptions.managedDevices.devices {
            pixel6Api31(com.android.build.api.dsl.ManagedVirtualDevice) {
                device 'Pixel 6'
                apiLevel 31
                systemImageSource 'aosp'
            }
        }
    }
    
    dependencies { ... }
    
    // Baseline Profile Gradle plugin configuration. Everything is optional. This
    // example uses the GMD added earlier and disables connected devices.
    baselineProfile {
        // Specifies the GMDs to run the tests on. The default is none.
        managedDevices ['pixel6Api31']
        // Enables using connected devices to generate profiles. The default is
        // `true`. When using connected devices, they must be rooted or API 33 and
        // higher.
        useConnectedDevices false
    }
  3. یک تست مشخصات پایه را در ماژول تست :baseline-profile ایجاد کنید. مثال زیر آزمایشی است که برنامه را شروع می کند و منتظر بیکار است.

    کاتلین

    class BaselineProfileGenerator {
    
        @get:Rule
        val baselineRule = BaselineProfileRule()
    
        @Test
        fun startupBaselineProfile() {
            baselineRule.collect("com.myapp") {
                startActivityAndWait()
            }
        }
    }

    جاوا

    public class BaselineProfileGenerator {
    
        @Rule
        Public BaselineProfileRule baselineRule = new BaselineProfileRule();
    
        @Test
        Public void startupBaselineProfile() {
            baselineRule.collect(
                "com.myapp",
                (scope -> {
                    scope.startActivityAndWait();
                    Return Unit.INSTANCE;
                })
            )
        }
    }
  4. برای مثال :app پرونده build.gradle.kts را در ماژول برنامه به روز کنید.

    1. افزونه androidx.baselineprofile را اعمال کنید.
    2. یک وابستگی baselineProfile به ماژول :baseline-profile اضافه کنید.

    کاتلین

    plugins {
        id("com.android.application")
        id("androidx.baselineprofile")
    }
    
    android {
        // There are no changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile(project(":baseline-profile"))
    }

    شیار

    plugins {
        id 'com.android.application'
        id 'androidx.baselineprofile'
    }
    
    android {
        // No changes to the `android` block.
        ...
    }
    
    dependencies {
        ...
        // Add a `baselineProfile` dependency on the `:baseline-profile` module.
        baselineProfile ':baseline-profile'
    }
  5. با اجرای :app:generateBaselineProfile یا :app:generate Variant BaselineProfile .

  6. در پایان کار تولید ، مشخصات پایه در app/src/ variant /generated/baselineProfiles کپی می شود.

با AGP 7.3-7.4 یک پروفایل پایه جدید ایجاد کنید

تولید پروفایل های پایه با AGP 7.3-7.4 امکان پذیر است ، اما ما اکیداً توصیه می کنیم حداقل AGP 8.1 را ارتقا دهید تا بتوانید از افزونه Gradle Profile Profile و آخرین ویژگی های آن استفاده کنید.

اگر نیاز به ایجاد پروفایل های پایه با AGP 7.3-7.4 دارید ، مراحل همان مراحل AGP 8.1 است ، با استثنائات زیر:

به صورت دستی قوانین تولید شده را اعمال کنید

ژنراتور مشخصات پایه یک فایل متنی با فرمت قابل خواندن (HRF) در دستگاه ایجاد می کند و آن را در دستگاه میزبان شما کپی می کند. برای اعمال نمایه تولید شده در کد خود ، این مراحل را دنبال کنید:

  1. فایل HRF را در پوشه ساخت ماژول قرار دهید که نمایه را در: [module]/build/outputs/managed_device_android_test_additional_output/[device] ایجاد می کنید.

    پروفایل ها از [class name]-[test method name]-baseline-prof.txt نامگذاری BaselineProfileGenerator-startup-baseline-prof.txt پیروی می کنند ، که به نظر می رسد:

  2. نمایه تولید شده را در src/main/ و تغییر نام پرونده به baseline-prof.txt کپی کنید.

  3. یک وابستگی به کتابخانه ProfileInstaller در پرونده برنامه خود در پرونده build.gradle.kts اضافه کنید تا بتوانید تدوین مشخصات پایه محلی را که در آن پروفایل های ابر در دسترس نیستند ، فعال کنید. این تنها راه برای کنار گذاشتن پروفایل پایه در محلی است.

    dependencies {
         implementation("androidx.profileinstaller:profileinstaller:1.4.1")
    }
    
  4. نسخه تولید برنامه خود را بسازید در حالی که قوانین کاربردی HRF به صورت باینری گردآوری شده و در APK یا AAB گنجانده شده است. سپس برنامه خود را طبق معمول توزیع کنید.

مشخصات مشخصات پایه

برای معیار مشخصات پایه خود ، یک پیکربندی جدید تست Android Instrumented Run را از عمل Gutter ایجاد کنید که معیارهای تعریف شده در پرونده StartupBenchmarks.kt یا StartupBencharks.java اجرا می کند. برای کسب اطلاعات بیشتر در مورد تست معیار ، به ایجاد یک کلاس ماکروبچارک و اندازه گیری خودکار با کتابخانه ماکروبچارک مراجعه کنید.

شکل 3 تست های اندرویدی را از عمل روده اجرا کنید.

هنگامی که این کار را در Android Studio اجرا می کنید ، خروجی ساخت حاوی جزئیاتی از پیشرفت های سرعت است که مشخصات پایه ارائه می دهد:

StartupBenchmarks_startupCompilationBaselineProfiles
timeToInitialDisplayMs   min 161.8,   median 178.9,   max 194.6
StartupBenchmarks_startupCompilationNone
timeToInitialDisplayMs   min 184.7,   median 196.9,   max 202.9

تمام مسیرهای کد مورد نیاز را ضبط کنید

دو معیار اصلی برای اندازه گیری زمان راه اندازی برنامه به شرح زیر است:

زمان نمایش اولیه (TTID)
زمان لازم برای نمایش اولین قاب UI برنامه.
زمان نمایش کامل (TTFD)
TTID به علاوه زمان نمایش محتوا که پس از نمایش قاب اولیه به صورت ناهمزمان بارگذاری می شود.

TTFD پس از ComponentActivity روش reportFullyDrawn() گزارش شده () گزارش شده است. اگر reportFullyDrawn() هرگز فراخوانی نشود ، به جای آن TTID گزارش می شود. ممکن است لازم باشد که پس از اتمام بارگذاری reportFullyDrawn() تا زمانی که بارگیری ناهمزمان انجام شود. به عنوان مثال ، اگر UI دارای یک لیست پویا مانند یک RecyclerView یا لیست تنبل باشد ، ممکن است این لیست توسط یک کار پس زمینه جمع شود که پس از اولین بار به اتمام می رسد و بنابراین ، پس از مشخص شدن UI به عنوان کاملاً ترسیم شده است. در چنین مواردی ، کدی که پس از رسیدن UI به حالت کاملاً کشیده اجرا می شود ، در مشخصات پایه قرار نمی گیرد.

برای اینکه جمعیت لیست را به عنوان بخشی از مشخصات پایه خود درج کنید ، با استفاده از getFullyDrawnReporter() به FullyDrawnReporter دریافت کرده و یک گزارشگر را در کد برنامه خود اضافه کنید. پس از اتمام کار پس زمینه ، گزارشگر را منتشر کنید. تا زمانی که همه خبرنگاران آزاد نشوند ، روش FullyDrawnReporter با روش reportFullyDrawn() تماس نمی گیرد. با این کار ، مشخصات پایه شامل مسیرهای کد مورد نیاز برای جمع آوری لیست است. این رفتار برنامه را برای کاربر تغییر نمی دهد ، اما به شما امکان می دهد مشخصات پایه شامل تمام مسیرهای کد لازم باشد.

اگر برنامه شما از JetPack Compose استفاده می کند ، از API های زیر استفاده کنید تا حالت کاملاً ترسیم شده را نشان دهید:

  • ReportDrawn نشان می دهد که ترکیب شما بلافاصله برای تعامل آماده است.
  • ReportDrawnWhen یک محمول مانند list.count > 0 را می گیرد تا نشان دهد چه زمانی ترکیب شما برای تعامل آماده است.
  • ReportDrawnAfter یک روش تعلیق را می گیرد که پس از اتمام ، نشان می دهد که ترکیب شما برای تعامل آماده است.
{% کلمه به کلمه %} {% آخر کلمه %} {% کلمه به کلمه %} {% آخر کلمه %}