אפשר לבצע אופטימיזציה לחבילות ספציפיות באמצעות R8 עם packageScope. השלב הזה מיועד כאפשרות ראשונה לאפליקציות שעדיין לא משתמשות ב-R8, ולא מומלץ לאפליקציות שכבר משתמשות ב-R8.
כדאי לשקול אם להשתמש ב-packageScope
אם האפליקציה כבר משתמשת ב-R8, אל תשתמשו ב-packageScope, כי זו הגדרה לא אופטימלית מבחינת ביצועים וגודל האפליקציה. במקום זאת, כדאי לשפר את ההגדרות של R8 באפליקציה באמצעות כללי שמירה משופרים, או אם משתמשים במצב תאימות, כדאי לעבור למצב המלא של R8.
אפליקציות שעדיין לא משתמשות ב-R8, אבל עוברות לשימוש ב-R8, יכולות להשתמש ב-packageScope כדי לנהל את המעבר באופן הדרגתי. הכלי R8 מבצע אופטימיזציות חזקות שיכולות לשנות את התנהגות האפליקציה. לכן, אם מצמצמים את היקף האופטימיזציות לחבילות ספציפיות שאפשר לבצע בהן אופטימיזציה בבטחה – כמו AndroidX ו-Kotlin – אפשר לשפר את הביצועים בסיכון מינימלי. אחרי שהאפליקציה תהיה יציבה, תוכלו להרחיב את האופטימיזציות האלה בהדרגה לשאר בסיס הקוד והתלות, ולבדוק את היציבות בכל שלב.
דרישות מוקדמות
כדי להשתמש ב-R8 עם packageScope, צריך:
- פלאגין של Android Gradle בגרסה 9.0 ואילך.
- R8 במצב מלא, ולא במצב תאימות.
הגדרת האופטימיזציה
כדי להפעיל אופטימיזציה באמצעות packageScope, פועלים לפי השלבים הבאים.
בחירת ספריות לאופטימיזציה
מזהים את הספריות שרוצים לבצע בהן אופטימיזציה. מומלץ להתחיל עם ספריות AndroidX ו-Kotlin androidx.**, kotlin.** ו-kotlinx.**, כי אלה ספריות יציבות שהוגדרו לתאימות ל-R8.
הפעלת התמיכה בשימוש ב-R8 עם packageScope
מוסיפים לקובץ gradle.properties של הפרויקט את הנתונים הבאים:
android.r8.gradual.support=true
הגדרת בלוק האופטימיזציה
בקובץ build.gradle.kts (או build.gradle) ברמת המודול, מוסיפים בלוק optimization להגדרות של גרסת ה-build לפרסום. בתוך הבלוק הזה, משתמשים ב-packageScope כדי לציין את החבילות הספציפיות שרוצים לבצע להן אופטימיזציה. בקובץ build.gradle.kts, עוטפים את רשימת החבילות בתגי setOf().
Kotlin
android {
buildTypes {
release {
optimization {
enable = true
packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
}
}
}
}
מגניב
android {
buildTypes {
release {
optimization {
enable = true
packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
}
}
}
}
בדיקת האופטימיזציה
אחרי שמחילים או מעדכנים את packageScope ההצהרה, חשוב לבצע בדיקה יסודית של האפליקציה כדי לוודא שלא חלו קריסות לא צפויות או שינויים בהתנהגות.
מעבר מאופטימיזציה של חבילות ספציפיות לאופטימיזציה של כל האפליקציה
כדי למקסם את היתרונות של האופטימיזציה, כדאי לעבור בהדרגה משימוש ב-packageScope לשימוש ב-R8 בכל האפליקציה. התהליך הזה כולל הרחבה הדרגתית של כיסוי האופטימיזציה:
- מתחילים עם ספריות יציבות. מתחילים עם ספריות נפוצות ויציבות שתואמות לאופטימיזציות של R8 ברשימה
packageScope. מתחילים עם ספריות AndroidX ו-Kotlinandroidx.**,kotlin.**ו-kotlinx.**. - הוספה הדרגתית של חבילות. מוסיפים בהדרגה קידומות חדשות של חבילות אל
packageScope:- הערכת תלויות. בודקים את הספריות של האפליקציה. מומלץ להוסיף לרשימה
packageScopeספריות רשמיות של Google (לדוגמה,com.google.**) וספריות חזקות אחרות כמוOkHttp(לדוגמה,okhttp3.**ו-okio.**). כדאי לתת עדיפות לספריות שלא כוללות שימוש נרחב ברפלקציה, בסריאליזציה או בקריאות של קוד Native (JNI). - תעדוף לפי גודל החבילה. אפשר להשתמש בכלי הניתוח של APK ב-Android Studio כדי לזהות את הגורמים הכי משמעותיים לגודל האפליקציה.
- יוצרים קובץ AAB או APK של גרסה עם R8 מושבת.
- פותחים אותו בכלי הניתוח ובודקים את הקבצים
dex. - מיון חבילות לפי גודל. החבילות הגדולות ביותר מניבות את ההחזר הכי גבוה על ההשקעה (ROI) לצורך אופטימיזציה. הגדרת הטירגוט של הספריות האלה קודם תאפשר לכם להקטין את הגודל בצורה משמעותית בשלב מוקדם בתהליך, בתנאי שכללי השמירה של הספריות האלה לא רחבים מדי. מידע נוסף זמין במאמר בחירה מושכלת של ספריות.
- הערכת תלויות. בודקים את הספריות של האפליקציה. מומלץ להוסיף לרשימה
- אימות שינויים בהתנהגות. אחרי שמוסיפים כל קידומת חבילה חדשה, חשוב לבצע בדיקות מקיפות כדי לזהות ולפתור רגרסיות או התנהגויות לא צפויות.
- הוספת חבילות אפליקציה בסוף. אם חבילות האפליקציה לא משתמשות בהרבה רפלקציה, כדאי לכלול את חבילות האפליקציה ב-
packageScopeולהוסיף כללי שמירה בהדרגה לפי הצורך. אם חבילות האפליקציה משתמשות בהרבה השתקפויות, צריך לכלול את החבילות ב-packageScopeולהוסיף כללי שמירה שחלים על כל החבילה עבור החבילות הנדרשות. כדאי לחזור על השלבים של יצירת כללי שימור כדי לשפר אותם. - עוברים לשימוש ב-R8 בכל האפליקציה. אחרי שרוב התלויות של האפליקציה נכללות בהצהרה
packageScopeוהאפליקציה יציבה, מסירים אתpackageScopeכדי לבצע אופטימיזציה של כל האפליקציה במצב מלא.