‫Android Gradle Plugin 3.6.0 (פברואר 2020)

הגרסה הזו של הפלאגין ל-Android דורשת את הדברים הבאים:

גרסת המינימום גרסת ברירת המחדל פתקים
Gradle 5.6.4 5.6.4 יש מידע נוסף במאמר בנושא עדכון Gradle.
SDK Build Tools 28.0.3 28.0.3 התקנה או הגדרה של SDK Build Tools.

תכונות חדשות

הגרסה הזו של Android Gradle plugin כוללת את התכונות החדשות הבאות.

הצגת הקישור

הצגת הכריכה מספקת בטיחות בזמן ההידור כשמפנים לתצוגות בקוד. עכשיו אפשר להחליף את findViewById() בהפניה למחלקת הקישור שנוצרה באופן אוטומטי. כדי להתחיל להשתמש ב-View binding, צריך לכלול את השורה הבאה בקובץ build.gradle של כל מודול:

      android {
          viewBinding.enabled = true
      }
      
      android {
          viewBinding.enabled = true
      }
      

מידע נוסף זמין במאמר בנושא הצגת מסמכי התיעוד של View Binding.

תמיכה ב-Maven Publish Plugin

הפלאגין Android Gradle כולל תמיכה בפלאגין Maven Publish Gradle, שמאפשר לכם לפרסם פריטי build במאגר Apache Maven. הפלאגין Android Gradle יוצר רכיב לכל ארטיפקט של וריאנט בנייה במודול האפליקציה או הספרייה, שאפשר להשתמש בו כדי להתאים אישית פרסום במאגר Maven.

מידע נוסף זמין בדף בנושא שימוש בתוסף Maven Publish.

כלי ברירת מחדל חדש ליצירת חבילות התקנה

כשבונים את גרסת הניפוי באגים של האפליקציה, הפלאגין משתמש בכלי אריזה חדש שנקרא zipflinger כדי לבנות את ה-APK. הכלי החדש הזה אמור לשפר את מהירות הבנייה. אם כלי האריזה החדש לא פועל כמו שציפיתם, אתם יכולים לדווח על באג. אפשר לחזור לשימוש בכלי הישן לאריזה על ידי הוספת השורות הבאות לקובץ gradle.properties:

        android.useNewApkCreator=false
      

שיוך של בנייה מקורית

עכשיו אפשר לקבוע את משך הזמן שנדרש ל-Clang כדי לבנות ולקשר כל קובץ C/C++ בפרויקט. ‫Gradle יכול להפיק מעקב ב-Chrome שכולל חותמות זמן לאירועי הקומפיילר האלה, כדי שתוכלו להבין טוב יותר כמה זמן נדרש לבניית הפרויקט. כדי ליצור את קובץ השיוך הזה של הגרסה:

  1. מוסיפים את הדגל -Pandroid.enableProfileJson=true כשמריצים build של Gradle. לדוגמה:

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. פותחים את דפדפן Chrome ומקלידים chrome://tracing בסרגל החיפוש.

  3. לוחצים על הלחצן טעינה ועוברים אל <var>project-root</var>/build/android-profile כדי למצוא את הקובץ. שם הקובץ הוא profile-<var>timestamp</var>.json.gz.

אפשר לראות את נתוני השיוך של הגרסה המקורית בחלק העליון של הצופה:

מעקב מקורי אחר שיוך בנייה ב-Chrome

שינויים בהתנהגות

כשמשתמשים בגרסה הזו של התוסף, יכול להיות שתיתקלו בשינויים הבאים בהתנהגות.

כברירת מחדל, ספריות מקוריות נארזות ללא דחיסה

כשמפתחים את האפליקציה, הפלאגין מגדיר עכשיו את extractNativeLibs ל-"false" כברירת מחדל. כלומר, ספריות ה-Native שלכם מיושרות לדף וארוזות ללא דחיסה. התוצאה היא גודל העלאה גדול יותר, אבל המשתמשים נהנים מהיתרונות הבאים:

  • גודל ההתקנה של האפליקציה קטן יותר כי הפלטפורמה יכולה לגשת לספריות המקוריות ישירות מתוך ה-APK המותקן, בלי ליצור עותק של הספריות.
  • גודל ההורדה קטן יותר כי הדחיסה ב-Play Store בדרך כלל טובה יותר כשכוללים ספריות מקוריות לא דחוסות ב-APK או ב-Android App Bundle.

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

        <application
          android:extractNativeLibs="true"
          ... >
        </application>
        
      

הערה: המאפיין extractNativeLibs manifest הוחלף באפשרות useLegacyPackaging DSL. מידע נוסף זמין בהערת הגרסה בנושא שימוש ב-DSL לאריזת ספריות מקוריות דחוסות.

גרסת ברירת המחדל של NDK

אם מורידים כמה גרסאות של NDK, התוסף Android Gradle בוחר עכשיו גרסת ברירת מחדל לשימוש בהידור של קובצי קוד המקור. בעבר, הפלאגין בחר בגרסה האחרונה שהורדה של NDK. כדי לשנות את ברירת המחדל שנבחרה על ידי התוסף, משתמשים במאפיין android.ndkVersion בקובץ build.gradle של המודול.

יצירת כיתות R פשוטה יותר

התוסף Android Gradle מפשט את נתיב המחלקה של הקומפילציה על ידי יצירת מחלקה אחת בלבד של R לכל מודול של ספרייה בפרויקט ושיתוף של מחלקות ה-R האלה עם תלויות אחרות של מודולים. האופטימיזציה הזו אמורה להוביל לבנייה מהירה יותר, אבל חשוב לזכור את הדברים הבאים:

  • מכיוון שהקומפיילר משתף מחלקות R עם תלות במודול במעלה הזרם, חשוב שכל מודול בפרויקט ישתמש בשם חבילה ייחודי.
  • ההרשאות של מחלקת R בספרייה ליחסי תלות אחרים בפרויקט נקבעות לפי ההגדרה שמשמשת לכלול את הספרייה כיחס תלות. לדוגמה, אם Library A כוללת את Library B כתלות מסוג 'api', ל-Library A ולספריות אחרות שתלויות ב-Library A יש גישה למחלקה R של Library B. עם זאת, יכול להיות שלספריות אחרות לא תהיה גישה למחלקה R של ספרייה ב'. אם ספרייה א' משתמשת בהגדרת התלות implementation. מידע נוסף על הגדרות תלות

הסרת משאבים שחסרים בהגדרות ברירת המחדל

במודולים של ספריות, אם כוללים משאב לשפה שלא נכללת בקבוצת ברירת המחדל של המשאבים – לדוגמה, אם כוללים את hello_world כמשאב מחרוזת ב-/values-es/strings.xml אבל לא מגדירים את המשאב הזה ב-/values/strings.xml – הפלאגין Android Gradle כבר לא כולל את המשאב הזה כשמבצעים קומפילציה של הפרויקט. השינוי הזה בהתנהגות אמור להוביל לפחות חריגות בזמן ריצה של Resource Not Found ולשיפור במהירות הבנייה.

‫D8 מכבד עכשיו את מדיניות השמירה של CLASS לגבי הערות

כשמבצעים קומפילציה של האפליקציה, D8 מתחשב עכשיו במקרים שבהם הערות חלות על מדיניות שמירה של CLASS וההערות האלה כבר לא זמינות בזמן הריצה. ההתנהגות הזו קיימת גם כשמגדירים את ה-SDK לטירגוט של האפליקציה לרמת API‏ 23, שבעבר אפשרה גישה להערות האלה במהלך זמן הריצה כשמבצעים קומפילציה של האפליקציה באמצעות גרסאות ישנות יותר של פלאגין Android Gradle ו-D8.

שינויים אחרים בהתנהגות

  • הפונקציה aaptOptions.noCompress כבר לא רגישה לאותיות רישיות בכל הפלטפורמות (גם ל-APK וגם לחבילות), והיא מתייחסת לנתיבים שבהם נעשה שימוש באותיות רישיות.
  • קישור הנתונים מתבצע עכשיו באופן מצטבר כברירת מחדל. מידע נוסף זמין בבעיה מספר 110061530.

  • כל בדיקות היחידה, כולל בדיקות יחידה של Roboelectric, ניתנות עכשיו לשמירה במטמון באופן מלא. מידע נוסף זמין בבעיה מספר 115873047.

תיקוני באגים

הגרסה הזו של Android Gradle plugin כוללת את תיקוני הבאגים הבאים:

בעיות מוכרות

בקטע הזה מתוארות בעיות ידועות שקיימות ב-Android Gradle Plugin 3.6.0.

ביצועים איטיים של משימת Android Lint

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

הבעיה מדווחת כבאג ב-IDEA ותיפתר ב-Android Gradle Plugin 4.0.

חסרה מחלקת מניפסט {:#agp-missing-manifest}

אם האפליקציה מגדירה הרשאות בהתאמה אישית בקובץ המניפסט שלה, בדרך כלל הפלאגין Android Gradle יוצר מחלקה Manifest.java שכוללת את ההרשאות בהתאמה אישית כקבועי מחרוזת. חבילות הפלאגין כוללות את המחלקה הזו באפליקציה, כך שקל יותר להתייחס להרשאות האלה בזמן הריצה.

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

  • מפנים להרשאות המותאמות אישית לפי השם המלא שלהן. לדוגמה, "com.example.myapp.permission.DEADLY_ACTIVITY".

  • אפשר להגדיר קבועים משלכם, כמו שמוצג בהמשך:

                public final class CustomPermissions {
                  public static final class permission {
                    public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY";
                  }
                }