אפשר לבצע אופטימיזציה לחבילות ספציפיות באמצעות R8 עם packageScope. השלב הזה מיועד כאפשרות ראשונה לאפליקציות שעדיין לא משתמשות ב-R8, ולא מומלץ לאפליקציות שכבר משתמשות ב-R8.
כדאי לשקול אם להשתמש ב-packageScope
אם האפליקציה כבר משתמשת ב-R8, אל תשתמשו ב-packageScope, כי זו הגדרה לא אופטימלית מבחינת הביצועים וגודל האפליקציה. במקום זאת, אפשר לשפר את ההגדרות של R8 באפליקציה באמצעות כללי שמירה משופרים, או אם משתמשים במצב תאימות, אפשר לעבור למצב המלא של R8.
באפליקציות שעדיין לא משתמשות ב-R8, אבל עוברות לשימוש ב-R8, אפשר להשתמש ב-packageScope כדי לנהל את המעבר באופן הדרגתי. מכיוון ש-R8 מבצע אופטימיזציות חזקות שיכולות לשנות את התנהגות האפליקציה, הגבלת האופטימיזציות האלה לחבילות ספציפיות שאפשר לבצע בהן אופטימיזציה בבטחה – כמו AndroidX ו-Kotlin – מאפשרת לכם לשפר את הביצועים עם סיכון מינימלי. אחרי שהאפליקציה תהיה יציבה, תוכלו להרחיב את האופטימיזציות האלה בהדרגה לשאר בסיס הקוד והתלות, ולבדוק את היציבות בכל שלב.
דרישות מוקדמות
כדי להשתמש ב-R8 עם packageScope, צריך Android Gradle Plugin בגרסה 9.0 ואילך.
הגדרת האופטימיזציה
כדי להפעיל אופטימיזציה באמצעות 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 { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
בדיקת האופטימיזציה
אחרי שמחילים או מעדכנים את ההצהרה של packageScope, חשוב לבצע בדיקה יסודית של האפליקציה כדי לוודא שלא מתרחשים קריסות בלתי צפויות או שינויים בהתנהגות.
מעבר מאופטימיזציה של חבילות ספציפיות לאופטימיזציה של כל האפליקציה
כדי למקסם את היתרונות של האופטימיזציה, מומלץ לעבור בהדרגה משימוש ב-packageScope לשימוש ב-R8 בכל האפליקציה. התהליך הזה כולל הרחבה הדרגתית של כיסוי האופטימיזציה:
- מתחילים עם ספריות יציבות. כדאי להתחיל עם ספריות נפוצות ויציבות שתואמות לאופטימיזציות של R8 ברשימה
packageScope. מתחילים עם ספריות AndroidX ו-Kotlinandroidx.**,kotlin.**ו-kotlinx.**. - הוספה הדרגתית של חבילות מוסיפים בהדרגה קידומות חדשות של חבילות ל-
packageScope:- הערכת תלויות. בודקים את הספריות של האפליקציה. מומלץ להוסיף לרשימה
packageScopeספריות רשמיות של Google (לדוגמה,com.google.**) וספריות חזקות אחרות כמוOkHttp(לדוגמה,okhttp3.**ו-okio.**). כדאי לתת עדיפות לספריות שלא כוללות שימוש נרחב ברפלקציה, בסריאליזציה או בקריאות לקוד מקורי (JNI). - תעדוף לפי גודל החבילה. אפשר להשתמש בכלי לניתוח APK ב-Android Studio כדי לזהות את הגורמים הכי משמעותיים לגודל האפליקציה.
1. יוצרים גרסת AAB או APK עם R8 מושבת.
1. פותחים אותו בכלי הניתוח ובודקים את הקבצים
dex. 1. מיון חבילות לפי גודל. החבילות הגדולות ביותר מניבות את ההחזר הגבוה ביותר על ההשקעה (ROI) לצורך אופטימיזציה. אם תטרגטו אותן קודם, תקבלו את ההפחתה המשמעותית ביותר בגודל בשלב מוקדם בתהליך, בתנאי שאין בספריות האלה כללים רחבים מדי של שמירה. מידע נוסף זמין במאמר בחירה מושכלת של ספריות.
- הערכת תלויות. בודקים את הספריות של האפליקציה. מומלץ להוסיף לרשימה
- אימות שינויים בהתנהגות. אחרי שמוסיפים כל קידומת חבילה חדשה, חשוב לבצע בדיקות מקיפות כדי לזהות ולפתור רגרסיות או התנהגויות לא צפויות.
- מוסיפים חבילות אפליקציה בסוף. אם חבילות האפליקציה לא משתמשות בהרבה השתקפויות, כדאי לכלול את חבילות האפליקציה ב-
packageScopeולהוסיף כללי שמירה בהדרגה לפי הצורך. אם חבילות האפליקציה שלכם משתמשות בהרבה השתקפויות, צריך לכלול את החבילות ב-packageScopeולהוסיף כללי שמירה שחלים על כל החבילה עבור החבילות הנדרשות. כדאי לחזור על השלבים של יצירת כללי שמירה כדי לשפר אותם. - עוברים לשימוש ב-R8 בכל האפליקציה. אחרי שרוב התלויות של האפליקציה נכללות בהצהרה
packageScopeוהאפליקציה יציבה, מסירים אתpackageScopeכדי לבצע אופטימיזציה של כל האפליקציה במצב מלא.