پلاگین Baseline Profile Gradle تولید و نگهداری پروفایل های پایه را آسان تر می کند. به شما کمک می کند کارهای زیر را انجام دهید:
- نمایه های پایه جدید برای برنامه خود ایجاد کنید .
- نمایه های پایه جدید برای کتابخانه خود ایجاد کنید .
- تولید نمایه پایه خود را سفارشی کنید.
این صفحه نحوه استفاده از افزونه Baseline Profile Gradle را برای سفارشی کردن تولید پروفایل های پایه خود توضیح می دهد.
الزامات پلاگین
- AGP 8.0 یا بالاتر
- وابستگی به آخرین نسخه پلاگین 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 به شرح زیر در build.gradle.kts
ماژول آزمایشی :baselineprofile
استفاده کنید:
کاتلین
baselineProfile { managedDevices += "pixel6Api31" }
شیار
baselineProfile { managedDevices = ['pixel6Api31'] }
هنگامی که از GMD برای تولید نمایه های پایه استفاده می کنید، useConnectedDevices
در ماژول آزمایشی :baselineprofile
خود روی false
قرار دهید:
کاتلین
baselineProfile { ... useConnectedDevices = false }
شیار
baselineProfile { ... useConnectedDevices false }
پروفایل های پایه را برای انواع مختلف ایجاد کنید
میتوانید پروفایلهای پایه را در هر نوع، هر طعم، یا بهعنوان یک فایل واحد برای استفاده برای همه انواع ایجاد کنید. این رفتار را از طریق تنظیمات ادغام کنترل کنید، همانطور که در مثال زیر در build.gradle.kts
ماژول برنامه یا کتابخانه نشان داده شده است.
کاتلین
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
در build.gradle.kts
ماژول برنامه یا کتابخانه ذخیره کنید:
-
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 { ... } create("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") } create("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 تأیید کنید.قوانین گسترده ای که بیش از حد برنامه را کامپایل می کند، به دلیل افزایش دسترسی به دیسک، سرعت راه اندازی را کاهش می دهد. اگر به تازگی با نمایه های خط پایه شروع کرده اید، نگران این نباشید. با این حال، بسته به برنامه شما و اندازه و تعداد سفرها، اضافه کردن تعداد زیادی سفر میتواند منجر به عملکرد کمتر از حد مطلوب شود. عملکرد برنامه خود را با آزمایش نمایههای مختلف و تأیید اینکه عملکرد پس از اضافهها پسرفت نمیکند، آزمایش کنید.