יצירת פרופילים לסטארט-אפ

פרופילים של חברות סטארט-אפ הם קבוצת משנה של פרופילים Baseline. מערכת ה-build משתמשת בפרופילים של סטארט-אפים כדי לשפר עוד יותר את האופטימיזציה של הכיתות והשיטות שהם מכילים, על ידי שיפור הפריסה של הקוד בקובצי ה-DEX של ה-APK. בדרך כלל, ההפעלה של האפליקציה באמצעות פרופילי ההפעלה מהירה יותר ב-15% עד 30% בהשוואה לשימוש בפרופילי הבסיס בלבד.

איור 1. שיפור של מיקום הקוד כתוצאה מאופטימיזציה של הפריסה של DEX.

דרישות

מומלץ להשתמש בפרופילים של הפעלה עם הכלים הבאים:

  • Jetpack Macrobenchmark 1.2.0 ואילך
  • Android Gradle Plugin מגרסה 8.2 ואילך
  • Android Studio Iguana ואילך

בנוסף, צריך להגדיר באפליקציה את ההגדרות הבאות:

  • R8 מופעל. בגרסה היציבה, מגדירים את הערך isMinifyEnabled = true.
  • אופטימיזציות של פריסת DEX מופעלות. בבלוק baselineProfile {} בקובץ ה-build של מודול האפליקציה, מגדירים את dexLayoutOptimization = true.

יצירת פרופיל של סטארט-אפ

כשמשתמשים בתבנית ברירת המחדל של הכלי ליצירת פרופילים Baseline, מערכת Android Studio יוצרת פרופיל Startup לצד פרופיל Baseline.

השלבים הכלליים ליצירה של פרופיל סטארט-אפ וליצירת פרופיל בסיס זהים לאלה של יצירת פרופיל בסיס.

הדרך שמוגדרת כברירת מחדל ליצירת פרופיל של סטארט-אפ היא באמצעות התבנית של מודול ה-Baseline Profile Generator ב-Android Studio. הנתונים האלה כוללים אינטראקציות של סטארט-אפים שמרכיבים פרופיל בסיסי של סטארט-אפ. כדי להוסיף לפרופיל ההפעלה הזה עוד תהליכי משתמש קריטיים (CUJ), מוסיפים את תהליכי ה-CUJ של הפעלת האפליקציה לבלוק rule עם הערך includeInStartupProfile שמוגדר כ-true. באפליקציות פשוטות, יכול להיות שאפשר להסתפק בהפעלת MainActivity של האפליקציה. באפליקציות מורכבות יותר, מומלץ להוסיף את נקודות הכניסה הנפוצות ביותר לאפליקציה, כמו הפעלת האפליקציה ממסך הבית או הפעלה של קישור עומק.

קטע הקוד הבא מציג גנרטור של פרופיל בסיס (קובץ BaselineProfileGenerator.kt כברירת מחדל) שכולל הפעלה של האפליקציה ממסך הבית והפעלה של קישור עמוק. קישור העומק מפנה ישירות אל פיד החדשות של האפליקציה, ולא למסך הבית של האפליקציה.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

מריצים את ההגדרה Generate Baseline Profile for app ומאתרים את הכללים של Startup Profile בקובץ src/<variant>/generated/baselineProfiles/startup-prof.txt.

שיקולים ליצירת פרופילים של חברות סטארט-אפ

הפלט של הכיתות והשיטות בפרופיל של סטארט-אפ מוגבל על ידי הגודל של קובץ ה-classes.dex הראשון. המשמעות היא שלא כל התהליכים בפרופיל הבסיסי צריכים להיות תהליכים בפרופיל של סטארט-אפ.

כדי להחליט אילו מסלולי משתמשים כדאי לכלול כשיוצרים פרופיל של סטארט-אפ, כדאי לחשוב איפה רוב המשתמשים מתחילים את השימוש באפליקציה. בדרך כלל זה קורה מהמרכז להפעלת אפליקציות, אחרי שהמשתמשים מתחברים לחשבון. זהו גם תהליך הבסיסי ביותר של יצירת פרופיל.

אחרי שמסיימים את תרחישים לדוגמה הראשונים, עוקבים אחרי משפך המשתמשים להפעלת האפליקציה. במקרים רבים, משפכים של אפליקציות בתחילת הדרך פועלים לפי הרשימה הבאה:

  1. הפעילות הראשית במרכז האפליקציות
  2. התראות שמפעילות את האפליקציה
  3. פעילויות אופציונליות במרכז האפליקציות

עובדים על הרשימה הזו מלמעלה ומפסיקים לפני ש-classes.dex מתמלא. כדי לכסות מסלולים נוספים, תוכלו להעביר את הקוד מנתיב ההפעלה ולהוסיף מסלולים נוספים. כדי להעביר קוד מנתיב ההפעלה, בודקים את עקבות Perfetto במהלך הפעלת האפליקציה ומחפשים פעולות ממושכות. אפשר גם להשתמש בבדיקת ביצועים ברמת המאקרו עם מעקב אחר שיטות מופעל כדי לקבל תצוגה מלאה ואוטומטית של קריאות לשיטות במהלך הפעלת האפליקציה.