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

תמיכה ב-Kotlin Script DSL

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

  • עכשיו מוצהרות במפורש תכונות ה-nullability וה-mutability בסוגי 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 המקורית החיצונית שלכם ב-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

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

המשימה 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. מידע נוסף על הדגל הזה זמין במאמר תמיכה בהסרת סוכר מ-API של Java 8 ומעלה (Android Gradle Plugin מגרסה 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 plugin

הפלאגין io.fabric Gradle הוצא משימוש והוא לא תואם לגרסה 4.1 של הפלאגין Android Gradle. מידע נוסף על Fabric SDK שהוצא משימוש ועל מעבר ל-Firebase Crashlytics SDK זמין במאמר בנושא שדרוג ל-Firebase Crashlytics SDK.