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 כוללת את התכונות החדשות הבאות.
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 שכולל חותמות זמן לאירועים האלה של הקומפיילר, כדי שתוכלו להבין טוב יותר כמה זמן נדרש לבניית הפרויקט. כדי ליצור את קובץ השיוך הזה של הגרסה:
-
הוספת הדגל
-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"
כברירת מחדל. כלומר, הספריות המקוריות שלכם מיושרות לדף וארוזות ללא דחיסה. למרות שהתוצאה היא גודל העלאה גדול יותר, המשתמשים נהנים מהיתרונות הבאים:
- גודל ההתקנה של האפליקציה קטן יותר כי הפלטפורמה יכולה לגשת לספריות המקוריות ישירות מתוך ה-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 כוללת את תיקוני הבאגים הבאים:
- עכשיו יש תמיכה בבדיקות יחידה של Robolectric במודולים של ספריות שנעשה בהם שימוש ב-data binding. מידע נוסף זמין בבעיה מספר 126775542.
- עכשיו אפשר להריץ משימות
connectedAndroidTest
בכמה מודולים כשמופעל מצב ההרצה המקבילית של Gradle parallel.
בעיות מוכרות
בקטע הזה מתוארות בעיות ידועות שקיימות בפלאגין 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"; } }