פלאגין Android Gradle 4.2.0 (מרץ 2021)

תאימות

גרסת מינימום גרסת ברירת המחדל הערות
גרדל 6.7.1 לא רלוונטי מידע נוסף זמין במאמר עדכון Gradle.
SDK Build Tools 30.0.2 30.0.2 התקנה או הגדרה של כלים לבניית SDK.
NDK לא רלוונטי 21.4.7075529 מתקינים או מגדירים גרסה אחרת של NDK.

תכונות חדשות

הגרסה הזו של הפלאגין של Android Gradle כוללת את התכונות החדשות הבאות.

שפת Java בגרסה 8 כברירת מחדל

החל מגרסה 4.2, מערכת AGP תשתמש ברמת השפה Java 8 כברירת מחדל. ב-Java 8 יש גישה למספר תכונות חדשות של השפה, כולל ביטויים של פונקציית lambda, הפניות ל-method וממשקי פונקציות סטטיים. הרשימה המלאה של התכונות הנתמכות מופיעה במסמכי העזרה של Java 8.

כדי לשמור על ההתנהגות הישנה, צריך לציין את Java 7 באופן מפורש בקובץ build.gradle.kts או build.gradle ברמת המודול:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

קומפילטור משאבים חדש של JVM

מהדר משאבי JVM חדש בכלי 4.2 של Android Gradle מחליף חלקים של מהדר המשאבים של AAPT2, לשיפור ביצועי ה-build, במיוחד במחשבים עם Windows. המהדר החדש של משאבי JVM מופעל כברירת מחדל.

יש עכשיו תמיכה בחתימות בגרסה 3 ובגרסה 4

הפלאגין Android Gradle 4.2 תומך עכשיו ב-APK v3 ו-APK v4 לחתימה. כדי להפעיל את אחד מהפורמטים האלה או את שניהם ב-build, מוסיפים את המאפיינים הבאים לקובץ build.gradle או build.gradle.kts ברמת המודול:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

חתימת APK v4 מאפשרת לפרוס במהירות חבילות APK גדולות באמצעות ADB התקנת APK מצטברת ב- Android 11. הדגל החדש הזה מטפל בשלב החתימה על קובץ ה-APK בתהליך הפריסה.

הגדרה של חתימת אפליקציה לכל וריאנט

עכשיו אפשר להפעיל או להשבית חתימה על אפליקציות בפלאגין של Android Gradle לכל וריאנט.

בדוגמה הזו מוסבר איך להגדיר חתימה על אפליקציה לכל וריאנט באמצעות השיטה onVariants() ב-Kotlin או ב-Groovy:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

מאפיין חדש של Gradle: android.native.buildOutput

כדי לצמצם את העומס בתוצאות ה-build, AGP 4.2 מסנן הודעות מ-builds מקומיים שמשתמשים ב-CMake וב-ndk-build, ומציג רק את הפלט של המהדר C/C++ כברירת מחדל. בעבר, נוצרה שורה של פלט לכל קובץ שנוצר, וכתוצאה מכך נוצרו כמות גדולה של הודעות מידע.

אם רוצים לראות את כל פלט ה-Native, מגדירים את ה- נכס Gradle של android.native.buildOutput עד verbose.

אפשר להגדיר את המאפיין הזה בקובץ gradle.properties או דרך בשורת הפקודה.

gradle.properties
android.native.buildOutput=verbose

שורת הפקודה
-Pandroid.native.buildOutput=verbose

ערך ברירת המחדל של הנכס הזה הוא quiet.

שינוי בהתנהגות של קובצי gradle.properties

החל מ-AGP 4.2, אי אפשר יותר לעקוף את המאפיינים של Gradle מתת-פרויקטים. במילים אחרות, אם אתם מצהירים על נכס הקובץ gradle.properties נמצא בתת-פרויקט במקום ברמה הבסיסית (root) המערכת תתעלם ממנו.

לדוגמה, בגרסאות קודמות, AGP יקרא ערכים מ- <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties, וכו' למודולים של אפליקציות, אם אותו מאפיין Gradle קיים <var>projectDir</var>/gradle.properties וגם <var>projectDir</var>/app/gradle.properties, הערך מ- <var>projectDir</var>/app/gradle.properties תקבל עדיפות.

ב-AGP 4.2, ההתנהגות הזו השתנתה, ו-AGP לא יטען ערכים מ- gradle.properties בפרויקטים משניים (למשל, <var>projectDir</var>/app/gradle.properties). השינוי הזה משקף את התנהגות חדשה של Gradle ותמיכה שמירת הגדרות במטמון

למידע נוסף על הגדרת ערכים ב-gradle.properties קבצים, אפשר לעיין מסמכי Gradle.

תאימות של Gradle ושינויים בהגדרות

כשכלי ה-build של Gradle פועל ב-Android Studio, הוא משתמש ב-JDK המצורף ל-Studio. בגרסאות הקודמות, JDK 8 נכלל בחבילה עם Studio. עם זאת, ב-4.2, JDK 11 נכלל עכשיו בחבילה במקום זאת. כשמשתמשים ב-JDK החדש בחבילה כדי להריץ Gradle, הדבר עלול לגרום לאי-תאימות או להשפיע על ביצועי ה-JVM בגלל שינויים באוסף האשפה. בהמשך מתוארות הבעיות האלה.

הערה: מומלץ להריץ את Gradle עם JDK 11, אבל אפשר לשנות את JDK שמשמש להרצת Gradle בתיבת הדו-שיח Project Structure. שינוי ההגדרה הזו ישנה רק את ה-JDK שמשמש להפעלת Gradle, ולא ישנה את ה-JDK שמשמש להפעלת Studio עצמו.

תאימות של Studio לפלאגין Android Gradle (AGP)

אפשר לפתוח ב-Android Studio 4.2 פרויקטים שמשתמשים ב-AGP מגרסה 3.1 ואילך, בתנאי ש-AGP פועל עם Gradle מגרסה 4.8.1 ואילך. לקבלת מידע נוסף מידע על תאימות Gradle, לעדכון Gradle

אופטימיזציה של גרסאות build של Gradle ל-JDK 11

העדכון ל-JDK 11 משפיע על הגדרת ברירת המחדל של האוסף האשפה של JVM, כי ב-JDK 8 נעשה שימוש באוסף האשפה המקביל, וב-JDK 11 נעשה שימוש באוסף האשפה G1.

כדי לשפר את ביצועי ה-build, מומלץ לבדוק את ה-builds של Gradle באמצעות ה-garbage collector המקביל. ב-gradle.properties, מגדירים את הדברים הבאים:

org.gradle.jvmargs=-XX:+UseParallelGC

אם כבר הוגדרו אפשרויות אחרות בשדה הזה, מוסיפים אפשרות חדשה:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

במאמר יצירת פרופיל ל-build מוסבר איך מודדים את מהירות ה-build בהגדרות שונות.

קובצי DEX לא דחוסים ב-APK כאשר minSdk = 28 ומעלה

AGP מעכשיו מקפל קובצי DEX לא דחוסים ב-APKs כברירת מחדל כשminSdk = 28 או יותר. הפעולה הזו גורמת להגדלת גודל ה-APK, אבל היא מובילה לגודל התקנה קטן יותר במכשיר, וגודל ההורדה הוא בערך זהה.

כדי לאלץ את AGP לארוז במקום זאת את קובצי ה-DEX בפורמט דחוס, אפשר להוסיף את הקטע הבא לקובץ build.gradle:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

שימוש ב-DSL כדי לארוז ספריות נייטיב דחוסות

מומלץ לארוז ספריות מקוריות ללא דחיסה, כי כך גודל ההתקנה של האפליקציה יהיה קטן יותר, גודל ההורדה של האפליקציה יהיה קטן יותר וזמן הטעינה של האפליקציה יהיה מהיר יותר למשתמשים. עם זאת, אם רוצים שפלאגין Android Gradle יארוז ספריות מקוריות דחוסות בזמן ה-build של האפליקציה, צריך להגדיר את הערך של useLegacyPackaging ל-true בקובץ build.gradle של האפליקציה:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

הדגל useLegacyPackaging מחליף את מאפיין המניפסט extractNativeLibs. כדי לקבל עוד רקע, אפשר לעיין בנתוני הגרסה ספריות מקוריות נארזות באופן לא דחוס כברירת מחדל.