פלאגין של Android Gradle 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 כוללת את התכונות החדשות הבאות.

View Binding

כריכת תצוגה מספקת בטיחות בזמן הידור כשמפנים לתצוגות בקוד. עכשיו אפשר להחליף את 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
      

שיוך (Attribution) של גרסאות build מקוריות

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

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

    gradlew assembleDebug -Pandroid.enableProfileJson=true

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

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

נתוני השיוך (Attribution) של ה-build המקורי מופיעים בחלק העליון של חלון התצוגה:

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

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

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

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

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

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

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

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

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

גרסת ברירת המחדל של 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 להערות

במהלך הידור האפליקציה, 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 בגלל רגרסיה בתשתית הניתוח שלו, שגורמת לחישוב איטי יותר של סוגים משוערים של פונקציות למבדה במבני קוד מסוימים.

הבעיה דווחה כבאג ב-IDEA ותתוקן בפלאגין של Android Gradle גרסה 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";
                  }
                }