‫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 plugin כוללת את התכונות החדשות הבאות.

תמיכה ב-DSL של Kotlin Script

כדי לשפר את חוויית העריכה של משתמשים ב-Kotlin buildscript, ה-DSL וממשקי ה-API של Android Gradle plugin 4.1 מוגדרים עכשיו בקבוצה של ממשקי Kotlin בנפרד ממחלקות ההטמעה שלהם. זאת אומרת ש:

  • ההגדרה של האם אפשר להקצות ערך null והאם אפשר לשנות את הערך של משתנה מוצהרת עכשיו באופן מפורש בסוגי Kotlin.
  • מאמרי העזרה שנוצרו מהממשקים האלה מפורסמים במאמרי העזרה של Kotlin API.
  • ממשק ה-API של הפלאגין Android Gradle מוגדר בבירור, כדי שבעתיד יהיה קל יותר להרחיב את בניית האפליקציות ל-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 ואילך, הגדרות התצורה לייבוא ספריות מקומיות מוכנות מראש השתנו. מידע נוסף זמין בנתוני הגרסה 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 Plugin

מטמון ה-build של AGP הוסר ב-AGP 4.1. בעבר, AGP build cache הוצג ב-AGP 2.3 כדי להשלים את Gradle build cache, אבל הוא הוחלף לגמרי על ידי Gradle build cache ב-AGP 4.1. השינוי הזה לא משפיע על זמן הבנייה.

המשימה 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 Plugin 4.0.0 ומעלה).

הוסרו מאפייני גרסה מהמחלקה BuildConfig בפרויקטים של ספריות

בפרויקטים של ספריות בלבד, המאפיינים BuildConfig.VERSION_NAME ו-BuildConfig.VERSION_CODE הוסרו מהסיווג BuildConfig שנוצר, כי הערכים הסטטיים האלה לא שיקפו את הערכים הסופיים של קוד הגרסה ושם האפליקציה, ולכן היו מטעים. בנוסף, הערכים האלה נמחקו במהלך מיזוג המניפסט.

בגרסה עתידית של Android Gradle plugin, המאפיינים 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.