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.