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

View Binding

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

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

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

  • גודל ההתקנה של האפליקציה קטן יותר כי הפלטפורמה יכולה לגשת לספריות המקוריות ישירות מתוך ה-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 בספרייה ליחסי תלות אחרים בפרויקט נקבעות לפי ההגדרה שמשמשת להכללת הספרייה כיחס תלות. לדוגמה, אם ספרייה A כוללת את ספרייה B כתלות מסוג 'api', לספרייה A ולספריות אחרות שתלויות בספרייה A יש גישה למחלקה R של ספרייה 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 כוללת את תיקוני הבאגים הבאים:

בעיות מוכרות

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

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

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

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

חסרה מחלקת מניפסט {:#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";
                  }
                }