פלאגין של Android Gradle 4.1.0 (אוגוסט 2020)
תאימות
| גרסת המינימום | גרסת ברירת המחדל | הערות | |
|---|---|---|---|
| Gradle | 6.5 | לא רלוונטי | יש מידע נוסף במאמר בנושא עדכון Gradle. |
| SDK Build Tools | 29.0.2 | 29.0.2 | צריך להתקין או להגדיר את SDK Build Tools. |
| NDK | לא רלוונטי | 21.1.6352462 | צריך להתקין או להגדיר גרסה אחרת של NDK. |
<p>This version of the Android plugin requires the following:</p>
<ul>
<li>
<p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
To learn more, read the section about <a href="#updating-gradle">updating
Gradle</a>.</p>
</li>
<li>
<p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
29.0.2</a> or higher.</p>
</li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>
תכונות חדשות
הגרסה הזו של הפלאגין של Android Gradle כוללת את התכונות החדשות הבאות.
תמיכה ב-Kotlin Script DSL
כדי לשפר את חוויית העריכה למשתמשים בסקריפט build של Kotlin, ה-DSL וממשקי ה-API של הפלאגין של Android Gradle בגרסה 4.1 מוגדרים עכשיו בקבוצה של ממשקי Kotlin בנפרד ממחלקות ההטמעה שלהם. כלומר:
- עכשיו, מאפיינים שניתנים לשינוי (mutability) ומאפיינים שמציינים אם ערך יכול להיות ריק (nullability) מוצהרים באופן מפורש בסוגי Kotlin.
- המסמכים שנוצרים מהממשקים האלה מתפרסמים במאמרי העזרה של ה-API של Kotlin.
- ממשק ה-API של הפלאגין של Android Gradle מוגדר בבירור, כדי שהרחבת גרסאות ה-build של Android תהיה פחות שבירה בעתיד.
חשוב: אם כבר הטמעתם סקריפטים של build ב-KTS או שאתם משתמשים ב-Kotlin ב-buildSrc, יכול להיות שזה יגרום לבעיות תאימות במקור לשגיאות מסוימות שהיו מופיעות כשגיאות בזמן ריצה בגרסאות קודמות.
סוגי אוספים שנועדו לעבור מוטציה ב-DSL מוגדרים עכשיו באופן אחיד בתור:
val collection: MutableCollectionType
כלומר, אי אפשר יותר לכתוב את הקוד הבא בסקריפטים של Kotlin בחלק מהאוספים שתמכו בו בעבר:
collection = collectionTypeOf(...)
עם זאת, שינוי האוסף נתמך באופן אחיד, כך ש-collection += … ו-collection.add(...) אמורים לפעול עכשיו בכל מקום.
אם נתקלתם בבעיות כששדרגתם פרויקט שמשתמש ב-DSL ובממשקי ה-API של Kotlin בפלאגין של Android Gradle, אתם יכולים לדווח על באג.
ייצוא של יחסי תלות ב-C/C++ מקובצי AAR
בגרסה 4.0 של הפלאגין של Android Gradle נוספה היכולת לייבא חבילות Prefab ביחסי תלות של AAR. ב-AGP 4.1, אפשר עכשיו לייצא ספריות מה-build החיצוני של C/C++ ב-AAR לפרויקט של ספריית Android.
כדי לייצא את ספריות ה-C/C++, מוסיפים את הקוד הבא לבלוק android בקובץ build.gradle של פרויקט הספרייה:
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
בדוגמה הזו, הספריות mylibrary ו-myotherlibrary מ-ndk-build או מ-CMake external C/C++ build ייארזו ב-AAR שנוצר על ידי ה-build, וכל אחת מהן תייצא את הכותרות מהספרייה שצוינה אל התלויות שלהן.
הערה: למשתמשים בפלאגין של Android Gradle בגרסה 4.0 ומעלה, הגדרות הייבוא של ספריות C/C++ מוכנות מראש השתנו. מידע נוסף זמין בנתוני הגרסה של 4.0.
תמיכה של R8 במטא-נתונים של Kotlin
Kotlin משתמשת במטא-נתונים מותאמים אישית בקובצי מחלקות של Java כדי לזהות מבנים של שפת Kotlin. עכשיו R8 תומך בתחזוקה ובכתיבה מחדש של מטא-נתונים של Kotlin, כדי לתמוך באופן מלא בכיווץ של ספריות ואפליקציות של Kotlin באמצעות kotlin-reflect.
כדי לשמור את המטא-נתונים של Kotlin, מוסיפים את כללי השמירה הבאים:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
ההוראה הזו תנחה את R8 לשמור את המטא-נתונים של Kotlin לכל המחלקות שנשמרות באופן ישיר.
מידע נוסף זמין במאמר כיווץ ספריות ואפליקציות של Kotlin באמצעות Kotlin reflection עם R8{:.external} ב-Medium.
טענות נכונות (assertions) בגרסאות build לניפוי באגים
כשמפתחים את גרסת ניפוי הבאגים של האפליקציה באמצעות הפלאגין של Android Gradle בגרסה 4.1.0 ואילך, המהדר המובנה (D8) ישכתב את קוד האפליקציה כדי להפעיל טענות נכונות (assertions) בזמן ההידור, כך שתמיד יהיו בדיקות פעילות של טענות נכונות.
שינויים בהתנהגות
הוסר מטמון ה-build של הפלאגין של Android Gradle
מטמון ה-build של AGP הוסר ב-AGP 4.1. מטמון ה-build של AGP הוצג בעבר ב-AGP 2.3 כדי להשלים את מטמון ה-build של Gradle, והוחלף לחלוטין על ידי מטמון ה-build של Gradle ב-AGP 4.1. השינוי הזה לא משפיע על זמן ה-build.
המשימה cleanBuildCache והמאפיינים android.enableBuildCache ו-android.buildCacheDir הוצאו משימוש ויוסרו ב-AGP 7.0. למאפיין android.enableBuildCache אין השפעה, והמאפיין android.buildCacheDir והמשימה cleanBuildCache יפעלו עד לגרסה AGP 7.0 כדי למחוק את כל התוכן הקיים במטמון ה-build של AGP.
גודל האפליקציה מצטמצם משמעותית באפליקציות שמשתמשות בכיווץ קוד
החל מהגרסה הזו, שדות ממחלקות R לא נשמרים יותר כברירת מחדל, מה שיכול להקטין משמעותית את גודל ה-APK של אפליקציות שמאפשרות כיווץ קוד. הפעולה הזו לא אמורה לגרום לשינוי בהתנהגות, אלא אם ניגשים למחלקות R באמצעות השתקפות. במקרה כזה, צריך להוסיף כללי שמירה למחלקות ה-R האלה.
המאפיין android.namespacedRClass שונה ל-android.nonTransitiveRClass
הדגל הניסיוני android.namespacedRClass נקרא עכשיו android.nonTransitiveRClass.
הדגל הזה מוגדר בקובץ gradle.properties ומאפשר להגדיר מרחב שמות לכל מחלקת R של ספרייה, כך שמחלקת ה-R שלה תכלול רק את המשאבים שהוצהרו בספרייה עצמה, ולא את המשאבים מיחסי התלות של הספרייה. כך אפשר להקטין את הגודל של מחלקת ה-R של הספרייה הזו.
Kotlin DSL: השם של coreLibraryDesugaringEnabled השתנה
אפשרות הקימפול coreLibraryDesugaringEnabled של Kotlin DSL השתנתה ל-isCoreLibraryDesugaringEnabled.
מידע נוסף על הדגל הזה זמין במאמר תמיכה בתהליך הסרה של סוכר תחבירי ב-Java 8+ API (פלאגין של Android Gradle בגרסה 4.0.0 ואילך).
מאפייני הגרסה הוסרו מהמחלקה BuildConfig בפרויקטים של ספרייה
בפרויקטים של ספריות בלבד, המאפיינים BuildConfig.VERSION_NAME ו-BuildConfig.VERSION_CODE הוסרו מהמחלקה BuildConfig שנוצרה, כי הערכים הסטטיים האלה לא שיקפו את הערכים הסופיים של קוד הגרסה ושם הגרסה של האפליקציה, ולכן הם היו מטעים. בנוסף, הערכים האלה נמחקו במהלך מיזוג המניפסט.
בגרסה עתידית של הפלאגין של Android Gradle, המאפיינים versionName ו-versionCode יוסרו גם מה-DSL של הספריות.
אין דרך לגשת באופן אוטומטי לקוד או לשם של גרסת האפליקציה
מפרויקט משנה של ספרייה.
במודולים של אפליקציות אין שינוי, עדיין אפשר להקצות ערכים ל-versionCode ול-versionName ב-DSL. הערכים האלה יועברו למניפסט של האפליקציה ולשדות של BuildConfig.
הגדרת הנתיב של ה-NDK
אפשר להגדיר את הנתיב להתקנת ה-NDK המקומית באמצעות המאפיין android.ndkPath בקובץ build.gradle של המודול.
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}אם משתמשים במאפיין הזה יחד עם
המאפיין android.ndkVersion,
הנתיב הזה חייב להכיל גרסת NDK שתואמת ל-android.ndkVersion.
שינויים בהתנהגות של בדיקות יחידה בספרייה
שינינו את האופן שבו בדיקות יחידה של ספרייה עוברות קומפילציה ומופעלות. בדיקות היחידה של הספרייה עוברות עכשיו קומפילציה ופועלות מול מחלקות קומפילציה/זמן ריצה של הספרייה עצמה, וכתוצאה מכך בדיקת היחידה צורכת את הספרייה באותו אופן שבו פרויקטי משנה חיצוניים עושים זאת. ההגדרה הזו בדרך כלל משפרת את הבדיקה.
במקרים מסוימים, בדיקות יחידה של ספרייה שמשתמשות בקישור נתונים עלולות להיתקל במחלקות חסרות של DataBindingComponent או BR. צריך להעביר את הבדיקות האלה לבדיקת אינסטרומנטציה בפרויקט androidTest, כי הידור והרצה של הבדיקות האלה מול המחלקות האלה בבדיקת יחידה עלולים להפיק פלט שגוי.
הפלאגין io.fabric Gradle הוצא משימוש
הפלאגין io.fabric Gradle הוצא משימוש והוא לא תואם לגרסה 4.1 של הפלאגין של Android Gradle. מידע נוסף על ערכת ה-SDK של Fabric שהוצאה משימוש ועל המעבר ל-Firebase Crashlytics SDK זמין במאמר שדרוג ל-Firebase Crashlytics SDK.