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

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

این صفحه نحوه استفاده از افزونه Baseline Profile Gradle را برای سفارشی کردن تولید پروفایل های پایه خود توضیح می دهد.

الزامات پلاگین

از دستگاه های مدیریت شده Gradle برای ایجاد نمایه های پایه استفاده کنید

برای استفاده از یک دستگاه مدیریت شده Gradle (GMD) برای تولید نمایه خط پایه خود، یکی را در پیکربندی build.gradle.kts ماژول تولید کننده پروفایل اضافه کنید - احتمالاً ماژول آزمایشی :baselineprofile - همانطور که در مثال زیر نشان داده شده است:

کاتلین

android {
   testOptions.managedDevices.devices {
       create<com.android.build.api.dsl.ManagedVirtualDevice>("pixel6Api31") {
           device = "Pixel 6"
           apiLevel = 31
           systemImageSource = "aosp"
       }
   }
}

شیار

android {
   testOptions.managedDevices.devices {
       pixel6Api31(ManagedVirtualDevice) {
           device 'Pixel 6'
           apiLevel = 31
           systemImageSource 'aosp'
       }
   }
}

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

کاتلین

baselineProfile {
    managedDevices += "pixel6Api31"
}

شیار

baselineProfile {
    managedDevices = ['pixel6Api31']
}

وقتی از GMD برای تولید نمایه های پایه استفاده می کنید، useConnectedDevices روی false قرار دهید:

کاتلین

baselineProfile {
    ...
    useConnectedDevices = false
}

شیار

baselineProfile {
    ...
    useConnectedDevices false
}

پروفایل های پایه را برای انواع مختلف ایجاد کنید

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

کاتلین

baselineProfile {
    mergeIntoMain = true
}

شیار

baselineProfile {
    mergeIntoMain true
}

برای ادغام پروفایل های تولید شده برای همه انواع در یک نمایه واحد، mergeIntoMain روی true تنظیم کنید. زمانی که این تنظیم true باشد، نمی‌توان نمایه‌های خط پایه را برای هر متغیر ایجاد کرد، بنابراین یک تکلیف Gradle به نام generateBaselineProfile وجود دارد. نمایه در src/main/generated/baselineProfiles خروجی می شود.

برای غیرفعال کردن ادغام و داشتن یک نمایه در هر گونه، mergeIntoMain را روی false قرار دهید. در این مورد، چندین تکلیف Gradle برای انواع مختلف وجود دارد. به عنوان مثال، وقتی دو طعم وجود دارد - مانند رایگان و پولی - و یک نوع ساخت نسخه آزاد، وظایف به شرح زیر است:

* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`

برای تعیین رفتار ادغام در هر نوع، از کد زیر استفاده کنید:

کاتلین

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain = true
        }
    }
}

شیار

baselineProfile {
    variants {
        freeRelease {
            mergeIntoMain true
        }
    }
}

در مثال قبل، انواعی که در آن پرچم روی true تنظیم شده است، همه در src/main/generated/baselineProfiles ادغام می شوند، در حالی که پروفایل های انواعی که پرچم روی false تنظیم شده است در پوشه src/<variant>/generated/baselineProfiles نگهداری می شوند. src/<variant>/generated/baselineProfiles .

به طور پیش فرض، mergeIntoMain برای کتابخانه ها روی true و برای برنامه ها false تنظیم شده است.

هنگام مونتاژ نسخه جدید، نمایه های خط پایه را به طور خودکار ایجاد کنید

می‌توانید به‌جای استفاده دستی از task generateBaselineProfile ، نمایه‌های خط پایه را طوری پیکربندی کنید که با هر نسخه نسخه‌ای به‌طور خودکار تولید شوند. با تولید خودکار، به روزترین نمایه در ساخت نسخه گنجانده شده است.

برای فعال کردن تولید خودکار برای بیلدهای انتشار، از پرچم automaticGenerationDuringBuild استفاده کنید:

کاتلین

baselineProfile {
    automaticGenerationDuringBuild = true
}

شیار

baselineProfile {
    automaticGenerationDuringBuild true
}

تنظیم پرچم automaticGenerationDuringBuild روی true باعث ایجاد یک نمایه پایه جدید برای هر مجموعه انتشار می شود. این به این معنی است که اجرای یک کار ساخت نسخه اسمبلی، مانند ./gradlew:app:assembleRelease ، همچنین :app:generateReleaseBaselineProfile می‌کند، آزمایش‌های ابزار دقیق نمایه پایه را شروع می‌کند، و ساخت نمایه پایه را که روی آن اجرا می‌شود، می‌سازد. در حالی که تولید خودکار به کاربران کمک می کند تا بهترین مزیت عملکرد را به دست آورند، به دلیل ساخت مضاعف و تست های ابزار دقیق، زمان ساخت را نیز افزایش می دهد.

همانطور که در مثال زیر نشان داده شده است، می توانید این رفتار را در هر گونه مشخص کنید:

کاتلین

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild = true
        }
    }
}

شیار

baselineProfile {
    variants {
        freeRelease {
            automaticGenerationDuringBuild true
        }
    }
}

در مثال قبل، وظیفه generateFreeReleaseBaselineProfile هنگام شروع assembleFreeRelease اجرا می شود. این به زمانی کمک می‌کند که کاربر بخواهد، برای مثال، release برای ساخت توزیع داشته باشد که همیشه نمایه را هنگام ساخت ایجاد کند، و یک نسخه releaseWithoutProfile برای آزمایش داخلی.

نمایه های خط پایه را در منابع ذخیره کنید

شما می توانید پروفایل های پایه را در فهرست منبع از طریق پرچم saveInSrc ذخیره کنید:

  • true : نمایه خط پایه در src/<variant>/generated/baselineProfiles ذخیره می شود. این به شما امکان می دهد آخرین نمایه تولید شده را با منابع خود متعهد کنید.
  • false : نمایه خط پایه در فایل های میانی در فهرست ساخت ذخیره می شود. به این ترتیب، هنگام دریافت کد، آخرین نمایه تولید شده را ذخیره نمی کنید.

کاتلین

baselineProfile {
    saveInSrc = true
}

شیار

baselineProfile {
    saveInSrc true
}

شما همچنین می توانید این رفتار را در هر گونه مشخص کنید:

کاتلین

baselineProfile {
    variants {
        freeRelease {
            saveInSrc = true
        }
    }
}

شیار

baselineProfile {
    variants {
        freeRelease {
            saveInSrc true
        }
    }
}

قوانین پروفایل فیلتر

افزونه Baseline Profile Gradle به شما امکان می دهد قوانین نمایه پایه ایجاد شده را فیلتر کنید. اگر می‌خواهید قوانین نمایه را برای کلاس‌ها و روش‌هایی که بخشی از وابستگی‌های دیگر برنامه نمونه یا خود کتابخانه هستند، حذف کنید، این به ویژه برای کتابخانه‌ها مفید است. فیلترها می‌توانند بسته‌ها و کلاس‌های خاصی را شامل و حذف کنند. وقتی فقط موارد استثنا را مشخص می‌کنید، فقط قوانین منطبق بر نمایه خط پایه مستثنی می‌شوند و هر چیز دیگری شامل می‌شود.

مشخصات فیلترها می تواند یکی از موارد زیر باشد:

  • نام بسته با دو علامت عام تمام می شود تا با بسته مشخص شده و همه بسته های فرعی مطابقت داشته باشد. برای مثال، com.example.** با com.example.method و com.example.method.bar مطابقت دارد.
  • نام بسته با علامت عام تمام می شود تا فقط با بسته مشخص مطابقت داشته باشد. برای مثال، com.example.* با com.example.method مطابقت دارد اما با com.example.method.bar مطابقت ندارد.
  • نام کلاس ها برای مطابقت با یک کلاس خاص - برای مثال، com.example.MyClass .

مثال‌های زیر نحوه گنجاندن و حذف بسته‌های خاص را نشان می‌دهند:

کاتلین

baselineProfile {
    filter {
        include("com.somelibrary.widget.grid.**")
        exclude("com.somelibrary.widget.grid.debug.**")
        include("com.somelibrary.widget.list.**")
        exclude("com.somelibrary.widget.list.debug.**")
        include("com.somelibrary.widget.text.**")
        exclude("com.somelibrary.widget.text.debug.**")
    }
}

شیار

baselineProfile {
    filter {
        include 'com.somelibrary.widget.grid.**'
        exclude 'com.somelibrary.widget.grid.debug.**'
        include 'com.somelibrary.widget.list.**'
        exclude 'com.somelibrary.widget.list.debug.**'
        include 'com.somelibrary.widget.text.**'
        exclude 'com.somelibrary.widget.text.debug.**'
    }
}

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

کاتلین

// Non-specific filters applied to all the variants.
baselineProfile {
    filter { include("com.myapp.**") }
}

// Flavor-specific filters.
baselineProfile {
    variants {
        free {
            filter {
                include("com.myapp.free.**")
            }
        }
        paid {
            filter {
                include("com.myapp.paid.**")
            }
        }
    }
}

// Build-type-specific filters.
baselineProfile {
    variants {
        release {
            filter {
                include("com.myapp.**")
            }
        }
    }
}

// Variant-specific filters.
baselineProfile {
    variants {
        freeRelease {
            filter {
                include("com.myapp.**")
            }
        }
    }
}

شیار

// Non-specific filters applied to all the variants.
baselineProfile {
    filter { include 'com.myapp.**' }
}

// Flavor-specific filters.
baselineProfile {
    variants {
        free {
            filter {
                include 'com.myapp.free.**'
            }
        }
        paid {
            filter {
                include 'com.myapp.paid.**'
            }
        }
    }
}

// Build-type specific filters.
baselineProfile {
    variants {
        release {
            filter {
                include 'com.myapp.**'
            }
        }
    }
}

// Variant-specific filters.
baselineProfile {
    variants {
        freeRelease {
            filter {
                include 'com.myapp.**'
            }
        }
    }
}

همچنین می‌توانید قوانین را با استفاده از آرگومان filterPredicate در BaselineProfileRule.collect() فیلتر کنید، اما توصیه می‌کنیم از پلاگین Gradle برای فیلتر کردن استفاده کنید زیرا راه ساده‌تری برای فیلتر کردن بسته‌های فرعی و یک مکان واحد برای پیکربندی کل ماژول فراهم می‌کند.

انواع ساخت معیار و نمایه پایه را سفارشی کنید

پلاگین Baseline Profile Gradle انواع ساخت اضافی را برای تولید نمایه ها و اجرای معیارها ایجاد می کند. این نوع ساخت با پیشوند benchmark و nonMinified است. به عنوان مثال، برای نوع ساخت release ، پلاگین انواع benchmarkRelease و nonMinifiedRelease را ایجاد می کند. این نوع ساخت ها به طور خودکار برای موارد استفاده خاص پیکربندی می شوند و به طور کلی نیازی به سفارشی سازی ندارند. اما مواردی وجود دارد که در آنها ممکن است همچنان استفاده از برخی گزینه های سفارشی مفید باشد، برای مثال اعمال یک پیکربندی امضای متفاوت.

شما می توانید انواع ساخت های تولید شده به صورت خودکار را با استفاده از زیرمجموعه ای از ویژگی های نوع ساخت سفارشی کنید. ویژگی هایی که قابل استفاده نیستند لغو می شوند. مثال زیر نشان می‌دهد که چگونه انواع ساخت‌های اضافی را سفارشی کنید و کدام ویژگی‌ها لغو می‌شوند:

کاتلین

android {
    buildTypes {
        release {
            ...
        }
        benchmarkRelease {
            // Customize properties for the `benchmarkRelease` build type here.
            // For example, you can change the signing config (by default
            // it's the same as for the `release` build type).
            signingConfig = signingConfigs.getByName("benchmarkRelease")
        }
        nonMinifiedRelease {
            // Customize properties for the `nonMinifiedRelease` build type here.
            signingConfig = signingConfigs.getByName("nonMinifiedRelease")

            // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't
            // customize the following properties, which are always overridden to
            // avoid breaking Baseline Profile generation:
            //
            // isJniDebuggable = false
            // isDebuggable = false
            // isMinifyEnabled = false
            // isShrinkResources = false
            // isProfileable = true
            // enableAndroidTestCoverage = false
            // enableUnitTestCoverage = false
        }
    }
}

شیار

android {
    buildTypes {
        release {
            ...
        }
        benchmarkRelease {
            // Customize properties for the `benchmarkRelease` build type here.
            // For example, you can change the signing config (by default it's the
            // same as for the `release` build type.)
            signingConfig = signingConfigs.benchmarkRelease
        }
        nonMinifiedRelease {
            // Customize properties for the `nonMinifiedRelease` build type here.
            signingConfig = signingConfigs.nonMinifiedRelease

            // From Baseline Profile Gradle plugin 1.2.4 and higher, you can't use
            // the following properties, which are always overridden to avoid breaking
            // Baseline Profile generation:
            //
            // isJniDebuggable = false
            // isDebuggable = false
            // isMinifyEnabled = false
            // isShrinkResources = false
            // isProfileable = true
            // enableAndroidTestCoverage = false
            // enableUnitTestCoverage = false       
        }
    }
}

یادداشت های اضافی

هنگام ایجاد نمایه های پایه، در اینجا موارد دیگری وجود دارد که باید از آنها آگاه باشید:

  • نمایه های پایه کامپایل شده باید کمتر از 1.5 مگابایت باشد. این در مورد قالب متن در فایل های منبع شما که معمولاً قبل از کامپایل بسیار بزرگتر هستند، صدق نمی کند. اندازه نمایه خط پایه باینری خود را با قرار دادن آن در مصنوع خروجی زیر assets/dexopt/baseline.prof برای APK یا BUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof برای AAB تأیید کنید.

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

Codelabs

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