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
שיוך (Attribution) של build מותאם
עכשיו אפשר לקבוע את משך הזמן שנדרש ל-Clang כדי ליצור ולקשר כל קובץ C/C++ בפרויקט. Gradle יכולה להפיק פלט של מעקב Chrome שמכיל חותמות זמן לאירועי המהדר (compiler) האלה, כדי שתוכלו להבין טוב יותר את הזמן שנדרש ליצירת הפרויקט. כדי להפיק את קובץ השיוך של ה-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"
כברירת מחדל. כלומר, ספריות ה-Native שלך מותאמות לדפים ואורזות בצורה לא דחוסה. אמנם העלאה של קובץ כזה גדולה יותר, אבל המשתמשים נהנים מהיתרונות הבאים:
- גודל התקנה קטן יותר של האפליקציה, כי הפלטפורמה יכולה לגשת לספריות המקומיות ישירות מה-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 עם יחסי תלות של מודול ב-upstream, חשוב שכל מודול בפרויקט ישתמש בשם חבילה ייחודי.
- החשיפה של סוג 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.
-
עכשיו אפשר לשמור באופן מלא את כל הבדיקות של היחידה, כולל בדיקות של יחידה רובואלקטרית. למידע נוסף, ראו בעיה מס' 115873047.
תיקוני באגים
הגרסה הזו של הפלאגין Android Gradle כוללת את תיקוני הבאגים הבאים:
- עכשיו יש תמיכה בבדיקות יחידה של Robolectric במודולים של ספריות שמשתמשים בקישור נתונים. מידע נוסף זמין בבעיה מס' 126775542.
- עכשיו אפשר להריץ משימות
connectedAndroidTest
במספר מודולים בזמן שמצב הביצוע המקביל של Gradle מופעל.
בעיות מוכרות
בקטע הזה מתוארות בעיות ידועות בפלאגין של Android Gradle בגרסה 3.6.0.
ביצועים איטיים של המשימה Android Lint
בפרויקטים מסוימים, השלמת החיפוש של 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"; } }