Android Gradle Plugin 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 כוללת את התכונות החדשות הבאות.
תמיכה ב-DSL של Kotlin Script
כדי לשפר את חוויית העריכה של משתמשי buildscript ב-Kotlin, ה-DSL וממשקי ה-API של הפלאגין Android Gradle 4.1 מוגדרים עכשיו בקבוצה של ממשקי Kotlin בנפרד מכיתות ההטמעה שלהם. זאת אומרת ש:
- עכשיו אפשר להצהיר במפורש על יכולת השינוי והיכולת לקבל ערך null בסוגי Kotlin.
- המסמכים שנוצרים מהממשקים האלה מתפרסמים בחומר העזרה של Kotlin API.
- ממשק ה-API של הפלאגין של Android Gradle מוגדר בבירור, כדי שיהיה קל יותר להרחיב גרסאות build של Android בעתיד.
חשוב: אם כבר עברתם לשימוש בסקריפטים של build ב-KTS או משתמשים ב-Kotlin ב-buildSrc
, יכול להיות שיהיו בעיות בתאימות למקור של שגיאות מסוימות, שקודם היו מופיעות כשגיאות זמן ריצה.
סוגי האוספים שנועדו לעבור מוטציה ב-DSL מוגדרים עכשיו באופן אחיד בתור:
val collection: MutableCollectionType
המשמעות היא שאי אפשר יותר לכתוב את הקוד הבא בסקריפטים של Kotlin באוספים מסוימים שתומכים בכך:
collection = collectionTypeOf(...)
עם זאת, יש תמיכה אחידה בביצוע מניפולציות על האוסף, כך ש-collection += …
ו-collection.add(...)
אמורים לפעול עכשיו בכל מקום.
אם נתקלתם בבעיות במהלך השדרוג של פרויקט שמשתמש ב-DSL ובממשקי ה-API של Kotlin ב-Android Gradle Plugin, תוכלו לדווח על באג.
ייצוא יחסי תלות של C/C++ מקובצי AAR
בגרסה 4.0 של הפלאגין של Android Gradle נוספה האפשרות לייבא חבילות Prefab ביחסי תלות של AAR. ב-AGP 4.1 אפשר עכשיו לייצא ספריות מה-build המקורי החיצוני ב-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 שנוצר על ידי ה-build, וכל אחת מהן תייצא את הכותרות מהספרייה שצוינה לקבצים התלויים בה.
הערה: משתמשים ב-Android Gradle plugin בגרסה 4.0 ואילך צריכים לשנות את הגדרות התצורה לייבוא ספריות מקומיות מוכנות מראש. למידע נוסף, ראו נתוני הגרסה 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.
טענות נכוֹנוּת בגרסת 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 שמו שונה
אפשרות הקומפילציה של Kotlin DSL coreLibraryDesugaringEnabled
השתנתה ל-isCoreLibraryDesugaringEnabled
.
מידע נוסף על הדגל הזה זמין במאמר תמיכה ב-desugaring של API מגרסה 8 ואילך של Java (פלאגין של 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.