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 11.
פרטים נוספים זמינים בהערות הגרסה 4.0.1.
תכונות חדשות
הגרסה הזו של פלאגין של Android Gradle כוללת את התכונות החדשות הבאות.
הצגת הקישור
הצגת הכריכה מספקת בטיחות בזמן ההידור כשמפנים לתצוגות בקוד. עכשיו אפשר להחליף את findViewById() בהפניה למחלקת הקישור שנוצרה באופן אוטומטי. כדי להתחיל להשתמש ב-View binding,
צריך לכלול את השורה הבאה בקובץ build.gradle של כל מודול:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
מידע נוסף זמין במאמר בנושא הצגת מסמכי תיעוד של Binding.
תמיכה בתוסף Maven Publish
הפלאגין של Android Gradle כולל תמיכה בפלאגין Maven Publish Gradle, שמאפשר לכם לפרסם ארטיפקטים של build במאגר Apache Maven. הפלאגין של Android Gradle יוצר רכיב לכל ארטיפקט של וריאנט build במודול האפליקציה או הספרייה, שאפשר להשתמש בו כדי להתאים אישית פרסום במאגר Maven.
מידע נוסף זמין בדף בנושא שימוש בתוסף Maven Publish.
כלי ברירת מחדל חדש ליצירת חבילות התקנה
כשיוצרים את גרסת הניפוי באגים של האפליקציה, הפלאגין משתמש בכלי אריזה חדש בשם zipflinger כדי ליצור את קובץ ה-APK. הכלי החדש הזה אמור לשפר את מהירות הבנייה. אם כלי האריזה החדש לא פועל כמו שציפיתם, אתם יכולים לדווח על באג. אפשר לחזור לשימוש בכלי הישן לאריזה על ידי הוספת השורות הבאות לקובץ gradle.properties:
android.useNewApkCreator=false
שיוך של בנייה מקורית
עכשיו אפשר לקבוע את משך הזמן שנדרש ל-Clang כדי לבנות ולקשר כל קובץ C/C++ בפרויקט. Gradle יכול להפיק פלט של מעקב ב-Chrome שכולל חותמות זמן של אירועי הקומפיילר האלה, כדי שתוכלו להבין טוב יותר את הזמן שנדרש לבניית הפרויקט. כדי ליצור את קובץ השיוך הזה של הגרסה:
-
מוסיפים את הדגל
-Pandroid.enableProfileJson=trueכשמריצים build של Gradle. לדוגמה:gradlew assembleDebug -Pandroid.enableProfileJson=true -
פותחים את דפדפן Chrome ומקלידים
chrome://tracingבסרגל החיפוש. -
לוחצים על הלחצן טעינה ועוברים אל
<var>project-root</var>/build/android-profileכדי למצוא את הקובץ. שם הקובץ הואprofile-<var>timestamp</var>.json.gz.
נתוני השיוך של הגרסה המקורית מוצגים בחלק העליון של הכלי לצפייה:

שינויים בהתנהגות
כשמשתמשים בגרסה הזו של התוסף, יכול להיות שיהיו שינויים בהתנהגות.
ספריות מקוריות שנארזות ללא דחיסה כברירת מחדל
כשמפתחים את האפליקציה, הפלאגין מגדיר עכשיו את
extractNativeLibs ל-"false" כברירת מחדל. כלומר, ספריות ה-Native שלכם מיושרות לדף וארוזות ללא דחיסה. התוצאה היא גודל העלאה גדול יותר, אבל המשתמשים נהנים מהיתרונות הבאים:
- גודל ההתקנה של האפליקציה קטן יותר כי הפלטפורמה יכולה לגשת לספריות המקוריות ישירות מתוך ה-APK המותקן, בלי ליצור עותק של הספריות.
- גודל ההורדה קטן יותר כי הדחיסה בחנות Play בדרך כלל טובה יותר כשכוללים ספריות מקוריות לא דחוסות ב-APK או בקובץ Android App Bundle.
אם רוצים שפלאגין של Android Gradle יארוז במקום זאת ספריות Native דחוסות, צריך לכלול את השורה הבאה במניפסט של האפליקציה:
<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 של ספרייה ליחסי תלות אחרים בפרויקט נקבעות לפי ההגדרה שמשמשת לכלול את הספרייה כיחס תלות. לדוגמה, אם 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 ולשיפור במהירות ה-build.
D8 מכבד עכשיו את מדיניות שמירת הנתונים של CLASS לגבי אנוטציות
כשמבצעים קומפילציה של האפליקציה, קומפיילר D8 מתחשב עכשיו במקרים שבהם אנוטציות חלות על מדיניות שימור של CLASS והאנוטציות האלה כבר לא זמינות בזמן הריצה. ההתנהגות הזו קיימת גם כשמגדירים את ה-SDK לטירגוט של האפליקציה לרמת API 23, שבעבר אפשרה גישה להערות האלה במהלך זמן הריצה כשמבצעים קומפילציה של האפליקציה באמצעות גרסאות ישנות יותר של פלאגין Android Gradle ו-D8.
שינויים אחרים בהתנהגות
-
הפונקציה
aaptOptions.noCompressכבר לא רגישה לאותיות רישיות בכל הפלטפורמות (גם ל-APK וגם לחבילות), והיא מתייחסת לנתיבים שבהם נעשה שימוש באותיות רישיות. -
קישור הנתונים מתבצע עכשיו באופן מצטבר כברירת מחדל. מידע נוסף זמין בבעיה מספר 110061530.
-
כל בדיקות היחידה, כולל בדיקות היחידה של Roboelectric, ניתנות עכשיו לשמירה במטמון באופן מלא. מידע נוסף זמין בבעיה מספר 115873047.
תיקוני באגים
הגרסה הזו של פלאגין של Android Gradle כוללת את תיקוני הבאגים הבאים:
- עכשיו יש תמיכה בבדיקות יחידה של Robolectric במודולים של ספריות שנעשה בהם שימוש ב-Data Binding. מידע נוסף זמין בבעיה מספר 126775542.
- עכשיו אפשר להריץ משימות
connectedAndroidTestבכמה מודולים במקביל, כשמופעל מצב ההרצה המקבילית של Gradle parallel.
בעיות מוכרות
בקטע הזה מתוארות בעיות מוכרות שקיימות בפלאגין של 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"; } }