פלאגין Android Gradle 3.6.0 (פברואר 2020)

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

תכונות חדשות

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

קישור תצוגה

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

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

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

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

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

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

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

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

        android.useNewApkCreator=false
      

שיוך (Attribution) של build מותאם

עכשיו אפשר לקבוע כמה זמן לוקח ל-Clang מקשרים כל קובץ C/C++ בפרויקט. אפשר להפיק פלט ממעקב של Chrome שמכיל חותמות זמן של אירועי המהדר (compiler), להבין את הזמן שנדרש לבניית הפרויקט שלכם. ליצירת פלט של ה-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

אפשר לראות את נתוני השיוך (Attribution) של מודעות מותאמות בחלק העליון של Viewer:

מעקב שיוך (Attribution) מקורי של build ב-Chrome

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

תיקוני באגים

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

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

בעיות מוכרות

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

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

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