הפלאגין Baseline Profile Gradle מאפשר ליצור ולתחזק בקלות פרופילים בסיסיים. זה עוזר לך לבצע את המשימות הבאות:
- יוצרים פרופילי Baseline חדשים לאפליקציה.
- יצירת פרופילים חדשים של Baseline לספרייה.
- התאמה אישית של יצירת פרופיל הבסיס.
בדף הזה מוסבר איך להשתמש בפלאגין Gradle של פרופיל הבקרה כדי להתאים אישית את היצירה של פרופילי הבקרה.
דרישות לגבי יישומי פלאגין
- AGP 8.0 ומעלה
- התלות הגרסה האחרונה של הפלאגין של Gradle
שימוש במכשירים מנוהלים של Gradle ליצירת פרופילים בסיסיים
להשתמש במכשיר מנוהל (GMDle) לצורך
יוצרים פרופיל Baseline, מוסיפים פרופיל כזה בהגדרה של build.gradle.kts
של המודול של מפיק הפרופיל — סביר להניח שמודול הבדיקה :baselineprofile
שמוצגת בדוגמה הבאה:
Kotlin
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
:
Kotlin
baselineProfile { managedDevices += "pixel6Api31" }
מגניב
baselineProfile { managedDevices = ['pixel6Api31'] }
כשמשתמשים ב-GMD כדי ליצור פרופילים בסיסיים, צריך להגדיר את useConnectedDevices
לערך
false
, במודול הבדיקה :baselineprofile
:
Kotlin
baselineProfile { ... useConnectedDevices = false }
מגניב
baselineProfile { ... useConnectedDevices false }
יצירת פרופילי Baseline לוריאציות שונות
אפשר ליצור פרופילים בסיסיים לכל וריאנט, לפי טעם או כקובץ יחיד
לשימוש בכל הווריאציות. אפשר לשלוט בהתנהגות הזו באמצעות הגדרת המיזוג, כפי שמוצג בדוגמה הבאה, בקובץ build.gradle.kts
של האפליקציה או מודול הספרייה.
Kotlin
baselineProfile { mergeIntoMain = true }
מגניב
baselineProfile { mergeIntoMain true }
כדי למזג את הפרופילים שנוצרו לכל הווריאציות לפרופיל אחד, צריך להגדיר
mergeIntoMain
עד true
. לא ניתן ליצור ערך בסיס לכל וריאנט
פרופילים כאשר ההגדרה הזו היא true
, כך שיש משימה אחת של Gradle בשם
generateBaselineProfile
. הפלט של הפרופיל הוא ב-
src/main/generated/baselineProfiles
כדי להשבית את המיזוג ויהיה לך פרופיל אחד לכל וריאנט, צריך להגדיר את mergeIntoMain
לערך
false
. במקרה כזה, יש כמה משימות Gradle ספציפיות לווריאנט. לדוגמה, אם יש שתי גרסאות – למשל, בחינם ובתשלום – וסוג build אחד של גרסה זמינה, המשימות הן:
* `generateFreeReleaseBaselineProfile`
* `generatePaidReleaseBaselineProfile`
* `generateReleaseBaselineProfile`
כדי להגדיר את התנהגות המיזוג של כל וריאנט, משתמשים בקוד הבא:
Kotlin
baselineProfile { variants { freeRelease { mergeIntoMain = true } } }
מגניב
baselineProfile { variants { freeRelease { mergeIntoMain true } } }
בדוגמה הקודמת, כל הווריאציות שבהן הדגל מוגדר כ-true
מוזגו ל-src/main/generated/baselineProfiles
, ואילו הפרופילים של הווריאציות שבהן הדגל מוגדר כ-false
נשארים בתיקייה src/<variant>/generated/baselineProfiles
.
כברירת מחדל, mergeIntoMain
מוגדר ל-true
עבור ספריות ו-false
לאפליקציות.
יצירת פרופילים בסיסיים באופן אוטומטי כשמרכיבים גרסה חדשה
אפשר להגדיר יצירת פרופיל בסיס באופן אוטומטי בכל build של גרסה, במקום להשתמש באופן ידני במשימה generateBaselineProfile
. ב-
באופן אוטומטי, הפרופיל המעודכן ביותר נכלל ב-build של הגרסה.
כדי להפעיל יצירה אוטומטית לגרסאות build של גרסאות, צריך להשתמש
דגל automaticGenerationDuringBuild
:
Kotlin
baselineProfile { automaticGenerationDuringBuild = true }
Groovy
baselineProfile { automaticGenerationDuringBuild true }
הגדרת הדגל automaticGenerationDuringBuild
לערך true
מפעילה את
של יצירת פרופיל Baseline חדש לכל הרכבה של גרסה. המשמעות היא
הרצת משימת build של גרסת הרכבה, כמו ./gradlew:app:assembleRelease
,
מפעיל גם את :app:generateReleaseBaselineProfile
, מפעיל את פרופיל Baseline
בדיקות אינסטרומנטציה, ויוצרים את הגרסה הבסיסית של פרופיל הבסיס שעליה הם מריצים.
היצירה האוטומטית עוזרת למשתמשים להפיק את המקסימום מהביצועים, אבל
גם מאריך את זמן ה-build בגלל ה-build והאינסטרומנטציה הכפולים
בדיקות.
ניתן גם לציין התנהגות זו לכל וריאנט, כפי שמתואר בהמשך דוגמה:
Kotlin
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild = true } } }
Groovy
baselineProfile { variants { freeRelease { automaticGenerationDuringBuild true } } }
בדוגמה הקודמת, המשימה generateFreeReleaseBaselineProfile
רצה
כשהחל מ-assembleFreeRelease
. זה עוזר כשהמשתמש רוצה לקבל,
לדוגמה, release
עבור build של הפצה שתמיד יוצר את הפרופיל
במהלך הפיתוח, ו-build של releaseWithoutProfile
לבדיקות פנימיות.
שמירת פרופילים Baseline במקורות
אפשר לשמור פרופילים בסיסיים בספריית המקור באמצעות הדגל saveInSrc
בקובץ build.gradle.kts
של האפליקציה או מודול הספרייה:
true
: פרופיל הבסיס מאוחסן בsrc/<variant>/generated/baselineProfiles
. כך תוכלו לשמור שנוצר באמצעות המקורות שלך.false
: פרופיל הבסיס מאוחסן בקובצי הביניים ב-build כך, בזמן התחייבות הקוד, לא שומרים את הפרופיל שנוצר.
Kotlin
baselineProfile { saveInSrc = true }
Groovy
baselineProfile { saveInSrc true }
אפשר גם לציין את ההתנהגות הזו לכל וריאנט:
Kotlin
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
.
הדוגמאות הבאות מראות איך לכלול ולהחריג חבילות ספציפיות:
Kotlin
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.**' } }
מתאימים אישית את כללי הסינון של וריאציות שונות באופן הבא:
Kotlin
// 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 לסינון, כי הוא מספק דרך פשוטה יותר לסנן חבילות משנה ומקום אחד להגדרת המודול כולו.
התאמה אישית של סוגי ה-build של נקודת ההשוואה ופרופיל הבסיס
הפלאגין Baseline Profile Gradle יוצר סוגים נוספים של גרסאות build כדי ליצור את הפרופילים ולהריץ את מדדי הביצועים. התחילית של סוגי ה-build האלה היא
benchmark
וגם nonMinified
לדוגמה, בסוג ה-build של release
,
יוצר את סוגי ה-build benchmarkRelease
ו-nonMinifiedRelease
.
סוגי ה-build האלה מוגדרים באופן אוטומטי לתרחיש הספציפי,
באופן כללי, ללא צורך בהתאמה אישית. אבל יש מקרים שבהם
עדיין יכול להיות שימושי כדי להחיל כמה אפשרויות מותאמות אישית, כמו החלת
הגדרות חתימה שונות.
אפשר להתאים אישית את סוגי ה-build שנוצרו באופן אוטומטי באמצעות קבוצת משנה של מאפיינים של סוג ה-build; מאפיינים שאי אפשר להשתמש בהם מתבטלים. הדוגמה הבאה מראה איך להתאים אישית את סוגי ה-build הנוספים אילו מאפיינים בוטלו:
Kotlin
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.5MB. מה לא עומד בדרישות? על פורמט הטקסט בקובצי המקור, שבדרך כלל גדול יותר לפני האוסף. אימות הגודל של ערך הבסיס הבינארי הפרופיל באמצעות איתורו בארטיפקט הפלט
assets/dexopt/baseline.prof
ל-APK אוBUNDLE-METADATA/com.android.tools.build.profiles/baseline.prof
ל-AAB.כללים רחבים שמרכיבים את האפליקציה יותר מדי עלולים להאט את ההפעלה בגלל גישה מוגברת לדיסק. אם רק התחלתם להשתמש במאפיין Baseline פרופילים, אל תדאגו. עם זאת, בהתאם לאפליקציה, לגודל ולמספר המסלולים, הוספת הרבה מסלולים עשויה להוביל לביצועים לא אופטימליים. מומלץ לבדוק את הביצועים של האפליקציה פרופילים ואימות שהביצועים אינם חוזרים לאחור לאחר ותוספות.