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