פלאגין של 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 11.
פרטים נוספים זמינים בנתוני הגרסה של 4.0.1.
תכונות חדשות
הגרסה הזו של הפלאגין של 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 הזה, מבצעים את הפעולות הבאות:
-
מוסיפים את הדגל
-Pandroid.enableProfileJson=trueכשמריצים Gradle build. לדוגמה:gradlew assembleDebug -Pandroid.enableProfileJson=true -
פותחים את דפדפן Chrome ומקלידים
chrome://tracingבסרגל החיפוש. -
לוחצים על הכפתור Load ומנווטים אל
<var>project-root</var>/build/android-profileכדי למצוא את הקובץ. שם הקובץ הואprofile-<var>timestamp</var>.json.gz.
נתוני השיוך (Attribution) של ה-build המקורי מופיעים בחלק העליון של חלון התצוגה:

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