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 כוללת את התכונות החדשות הבאות.

הצגת הקישור

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

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

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

תמיכה בפלאגין Maven Publish

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

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

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

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

        android.useNewApkCreator=false
      

שיוך של build מקורי

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

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

    gradlew assembleDebug -Pandroid.enableProfileJson=true

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

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

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

מעקב אחר שיוך של גרסאות build מקוריות ב-Chrome

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

כשמשתמשים בגרסה הזו של הפלאגין, יכול להיות שתבחינו בשינויים הבאים בהתנהגות.

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

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

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

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

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

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

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

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

יצירת קלאס R פשוטה

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

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

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

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

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

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

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

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

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

תיקוני באגים

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

  • עכשיו יש תמיכה בבדיקות יחידה של Robolectric במודולים של ספריות שמשתמשים בקישור נתונים. מידע נוסף זמין בבעיה מס' 126775542.
  • עכשיו אפשר להריץ משימות connectedAndroidTest במספר מודולים בזמן שמצב הביצוע המקביל של Gradle מופעל.

בעיות מוכרות

בקטע הזה מתוארות בעיות ידועות בפלאגין של Android Gradle בגרסה 3.6.0.

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

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

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

חסר סוג מניפסט {:#agp-missing-manifest}

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

יצירת הכיתה של המניפסט לא תקינה בפלאגין של Android Gradle בגרסה 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";
                  }
                }