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()
בהפניה לכיתה של הקישור שנוצרה באופן אוטומטי. כדי להתחיל להשתמש בקישור תצוגות, צריך לכלול את הקוד הבא בקובץ 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
שיוך של build מקורי
עכשיו אפשר לקבוע את משך הזמן שלוקח ל-Clang ליצור ולקשר כל קובץ C/C++ בפרויקט. Gradle יכול להפיק מעקב ב-Chrome שמכיל חותמות זמן של אירועי המהדר הזה, כדי שתוכלו להבין טוב יותר את הזמן הנדרש ליצירת הפרויקט. כדי להפיק את קובץ השיוך של ה-build:
-
מוסיפים את הדגל
-Pandroid.enableProfileJson=true
כשמריצים build של Gradle. לדוגמה:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
פותחים את דפדפן Chrome ומקלידים
chrome://tracing
בסרגל החיפוש. -
לוחצים על הלחצן Load (טעינה) ועוברים אל
<var>project-root</var>/build/android-profile
כדי למצוא את הקובץ. שם הקובץ הואprofile-<var>timestamp</var>.json.gz
.
נתוני השיוך של גרסאות build מותאמות אישית מוצגים בחלק העליון של הכלי לצפייה בנתונים:
שינויים בהתנהגות
כשמשתמשים בגרסה הזו של הפלאגין, יכול להיות שתבחינו בשינויים הבאים בהתנהגות.
ספריות מקוריות באריזות לא דחוסות כברירת מחדל
כשמפתחים את האפליקציה, הפלאגין מגדיר עכשיו את extractNativeLibs
ל-"false"
כברירת מחדל. כלומר, הספריות המקומיות מותאמות לדפים ומארזות ללא דחיסה. אמנם העלאה של קובץ כזה גדולה יותר, אבל המשתמשים נהנים מהיתרונות הבאים:
- גודל התקנה קטן יותר של האפליקציה, כי הפלטפורמה יכולה לגשת לספריות המקומיות ישירות מה-APK ההתקין, בלי ליצור עותק של הספריות.
- גודל קטן יותר של קובץ ההורדה, כי בדרך כלל דחיסת קובצי האפליקציה ב-Play Store טובה יותר כשכוללים ספריות מקוריות לא דחוסות בקובץ ה-APK או ב-Android App Bundle.
אם רוצים שפלאגין Android Gradle יארוז במקום זאת ספריות מקוריות דחוסות, צריך לכלול את הקוד הבא במניפסט של האפליקציה:
<application
android:extractNativeLibs="true"
... >
</application>
הערה: המאפיין extractNativeLibs
של המניפסט הוחלף באפשרות useLegacyPackaging
DSL. מידע נוסף זמין בהערות הגרסה שימוש ב-DSL כדי לארוז ספריות מקומיות דחוסות.
גרסת ברירת המחדל של 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 בפרויקטים מסוימים בגלל רגרסיה בתשתית הניתוח שלו, וכתוצאה מכך חישוב איטי יותר של סוגים משוערים ל-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"; } }