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.