Android Gradle Plugin 4.1.0 (אוגוסט 2020)
תאימות
גרסת מינימום | גרסת ברירת מחדל | הערות | |
---|---|---|---|
Gradle | 6.5 | לא רלוונטי | מידע נוסף זמין במאמר עדכון Gradle. |
כלים לבניית SDK | 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
כדי לשפר את חוויית העריכה של משתמשי buildscript ב-Kotlin, ה-DSL וממשקי ה-API של הפלאגין Android Gradle 4.1 מוגדרים עכשיו בקבוצה של ממשקי Kotlin בנפרד מכיתות ההטמעה שלהם. זאת אומרת ש:
- עכשיו אפשר להצהיר במפורש על יכולת השינוי והיכולת לקבל ערך null בסוגי Kotlin.
- המסמכים שנוצרו מהממשקים האלה מופיעים ב-Kotlin API Reference.
- ממשק ה-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
בפלאגין של Android Gradle בגרסה 4.0 נוספה האפשרות לייבא חבילות 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.
טענות נכוֹנוּת (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, ותמחק את כל התוכן הקיים של מטמון
AGP של build.
גודל האפליקציה מצטמצם באופן משמעותי באפליקציות שמשתמשות בכווץ קוד
החל מהגרסה הזו, שדות ממחלקות R לא נשמרים יותר כברירת מחדל, דבר שעלול לגרום לחיסכון משמעותי בגודל ה-APK באפליקציות שמאפשרות כיווץ קוד. השינוי לא אמור לגרום לשינוי בהתנהגות, אלא אם ניגשים למחלקות R באמצעות ההשתקפות. במקרה כזה צריך להוסיף כללי Keep למחלקות 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.