פלאגין של 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
כדי לשפר את חוויית העריכה של משתמשי Kotlin buildscript, ה-DSL וממשקי ה-API של פלאגין של Android Gradle 4.1 מוגדרים עכשיו בסדרה של ממשקי Kotlin בנפרד ממחלקות ההטמעה שלהם. כלומר:
- המאפיינים 'יכול להיות ריק' (nullability) ו'ניתן לשינוי' (mutability) מוצהרים עכשיו באופן מפורש בסוגי Kotlin.
- מאמרי העזרה שנוצרו מהממשקים האלה מפורסמים במאמרי העזרה של Kotlin API.
- ממשק ה-API של פלאגין של Android Gradle מוגדר בצורה ברורה, כדי שבעתיד יהיה קל יותר להרחיב את ה-builds של Android.
חשוב: אם כבר הטמעתם סקריפטים של KTS build או שאתם משתמשים ב-Kotlin ב-buildSrc, יכול להיות שיהיו בעיות תאימות למקור בגלל שגיאות מסוימות שהיו מופיעות כבעיות בזמן ריצה בגרסאות קודמות.
סוגי אוספים שמיועדים לשינוי ב-DSL מוגדרים עכשיו באופן אחיד כך:
val collection: MutableCollectionType
כלומר, אי אפשר יותר לכתוב את הפקודה הבאה בסקריפטים של Kotlin עבור אוספים מסוימים שתמכו בה בעבר:
collection = collectionTypeOf(...)
עם זאת, שינוי האוסף נתמך באופן אחיד, ולכן הפקודות collection += …
ו-collection.add(...) אמורות לפעול עכשיו בכל מקום.
אם נתקלתם בבעיות בשדרוג פרויקט שמשתמש ב-API וב-DSL של Kotlin של פלאגין Android Gradle, אתם מוזמנים לדווח על באג.
ייצוא יחסי תלות ב-C/C++ מקובצי AAR
בפלאגין של Android Gradle 4.0 נוספה האפשרות לייבא חבילות Prefab ביחסי תלות של AAR. ב-AGP 4.1, אפשר עכשיו לייצא ספריות מגרסת ה-build החיצונית של Native ב-AAR עבור פרויקט של ספריית Android.
כדי לייצא את הספריות המקומיות, מוסיפים את הקוד הבא לבלוק 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 native build ייארזו בקובץ ה-AAR שנוצר על ידי הבנייה, וכל אחת מהן תייצא את הכותרות מהספרייה שצוינה אל התלויות שלה.
הערה: למשתמשים בפלאגין של Android Gradle בגרסה 4.0 ואילך, הגדרות התצורה לייבוא ספריות Native מוכנות מראש השתנו. מידע נוסף זמין בנתוני הגרסה 4.0.
תמיכה ב-R8 במטא-נתונים של Kotlin
Kotlin משתמשת במטא-נתונים מותאמים אישית בקובצי מחלקות Java כדי לזהות מבנים של שפת Kotlin. R8 תומך עכשיו בשמירה ובכתיבה מחדש של מטא-נתונים של Kotlin, כדי לתמוך באופן מלא בהקטנה של ספריות ואפליקציות של Kotlin באמצעות kotlin-reflect.
כדי לשמור את המטא-נתונים של Kotlin, מוסיפים את כללי השמירה הבאים:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
ההוראה הזו תגרום ל-R8 לשמור את המטא-נתונים של Kotlin לכל המחלקות שנשמרות ישירות.
מידע נוסף זמין במאמר Shrinking Kotlin libraries and applications using Kotlin reflection with R8{:.external} ב-Medium.
טענות בגרסאות build לניפוי באגים
כשמבצעים build לגרסת הניפוי באגים של האפליקציה באמצעות פלאגין Android Gradle מגרסה 4.1.0 ואילך, הקומפיילר המובנה (D8) כותב מחדש את הקוד של האפליקציה כדי להפעיל טענות בזמן משך הזמן לקימפול, כך שטענות הבדיקה תמיד פעילות.
שינויים בהתנהגות
הוסר מטמון ה-build של פלאגין של Android Gradle
מטמון ה-build של AGP הוסר ב-AGP 4.1. בעבר הוצג ב-AGP 2.3 כדי להשלים את מטמון ה-build של Gradle, אבל ב-AGP 4.1 הוא הוחלף לגמרי במטמון ה-build של Gradle. השינוי הזה לא משפיע על זמן הבנייה.
המשימה cleanBuildCache והמאפיינים android.enableBuildCache ו-android.buildCacheDir הוצאו משימוש ויוסרו ב-AGP 7.0. למאפיין android.enableBuildCache אין כרגע השפעה,
אבל המאפיין android.buildCacheDir והמשימה cleanBuildCache יפעלו עד AGP 7.0 כדי למחוק את התוכן של מטמון הבנייה הקיים של AGP.
הגודל של אפליקציות שנעשה בהן שימוש בכיווץ קוד קטן משמעותית
החל מהגרסה הזו, שדות ממחלקות R לא נשמרים יותר כברירת מחדל, מה שיכול להוביל לחיסכון משמעותי בגודל קובץ ה-APK באפליקציות שבהן מופעלת הקטנת קוד. השינוי הזה לא אמור להשפיע על ההתנהגות של האפליקציה, אלא אם אתם ניגשים למחלקות R באמצעות רפלקציה. במקרה כזה, צריך להוסיף כללי שמירה למחלקות R האלה.
המאפיין android.namespacedRClass שונה לשם android.nonTransitiveRClass
הדגל הניסיוני android.namespacedRClass נקרא עכשיו android.nonTransitiveRClass.
הדגל הזה מוגדר בקובץ gradle.properties והוא מאפשר להגדיר מרחב שמות לכל מחלקת R בספרייה, כך שמחלקת R תכלול רק את המשאבים שהוגדרו בספרייה עצמה ולא משאבים מהתלויות של הספרייה. כך אפשר להקטין את הגודל של מחלקת R בספרייה.
Kotlin DSL: השם של coreLibraryDesugaringEnabled השתנה
אפשרות ההידור של Kotlin DSL coreLibraryDesugaringEnabled השתנתה ל-isCoreLibraryDesugaringEnabled.
מידע נוסף על הדגל הזה זמין במאמר תמיכה בהסרת סוכר מ-API של Java 8 ומגרסאות מתקדמות יותר (פלאגין של 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. מידע נוסף על Fabric SDK שהוצא משימוש ועל מעבר ל-Firebase Crashlytics SDK זמין במאמר בנושא שדרוג ל-Firebase Crashlytics SDK.