שימוש בשיטות המומלצות

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

דוגמאות טובות לכללי שמירה

כללי שמירה מוגדרים היטב הם ספציפיים ככל האפשר:

  • במפרט הכיתה, תמיד מציינים כיתה ספציפית, כיתה בסיסית או כיתה עם הערות, אם אפשר, כמו בדוגמאות הבאות:

    -keepclassmembers class com.example.MyClass {
      void someSpecificMethod();
    }
    
    -keepclassmembers ** extends com.example.MyBaseClass {
      void someSpecificMethod();
    }
    
    -keepclassmembers @com.example.MyAnnotation class ** {
      void someSpecificMethod();
    }
    
  • בכל מקרה שאפשר, צריך להצהיר על הגדרת החברים, ולהפנות רק לחלקים של המחלקה שצריך לשמור כדי שהאפליקציה תפעל. מומלץ לא להחיל כלל על כיתה שלמה על ידי הגדרת היקף החברים האופציונלי כ-{ *; }, אלא אם יש בכך צורך מובהק.

    -keepclassmembers com.example.MyClass {
      void someSpecificMethod();
      void @com.example.MyAnnotation *;
    }
    

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

-keepclassmembers class com.example.pkg.** { *; }

דברים שכדאי להימנע מהם

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

  • מומלץ להימנע משימוש באופרטור ההיפוך ! בכללי השמירה, כי יכול להיות שתחילו כלל על כמעט כל מחלקה באפליקציה שלכם בלי להתכוון.
  • אל תשתמשו בכללי שמירה שחלים על כל החבילה, כמו -keep class com.example.pkg.** { *; } long-term. אפשר להשתמש בהן באופן זמני כדי לעקוף בעיות בהגדרת R8. מידע נוסף זמין במאמר בנושא הגבלת היקף האופטימיזציה. באופן כללי, צריך להיזהר עם תווים כלליים – חשוב לוודא ששומרים רק את הקוד שצריך.

אם אתם לא מצליחים לפעול לפי הכללים האלה, יכול להיות שאתם משתמשים בהרבה השתקפויות פתוחות, ולכן כדאי להימנע מהשתקפות או מהספרייה באמצעות השתקפות (ראו את מחקר המקרה של Gson).