‫Android Gradle Plugin 4.2.0 (מרץ 2021)

תאימות

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

תכונות חדשות

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

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

החל מגרסה 4.2, ‏ AGP ישתמש ברמת השפה Java 8 כברירת מחדל. ‫Java 8 מספקת גישה למספר תכונות חדשות בשפה, כולל ביטויי למדה, הפניות לשיטות ושיטות סטטיות בממשק. הרשימה המלאה של התכונות הנתמכות זמינה במאמרי העזרה של 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

כלי חדש של Android Gradle plugin 4.2, שהוא מהדר משאבים של JVM, מחליף חלקים של מהדר המשאבים 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++. בעבר, שורת פלט נוצרה לכל קובץ שנבנה, וכתוצאה מכך נוצרה כמות גדולה של הודעות מידע.

כדי לראות את כל הפלט המקורי, מגדירים את מאפיין 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 בפרויקט משנה במקום בפרויקט הבסיסי, המערכת תתעלם ממנו.

לדוגמה, בגרסאות קודמות, 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

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

הערה: מומלץ להריץ את 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 של Gradle באמצעות כלי איסוף האשפה המקביל. ב-gradle.properties מגדירים את הפרטים הבאים:

org.gradle.jvmargs=-XX:+UseParallelGC

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

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

כדי למדוד את מהירות הבנייה באמצעות הגדרות שונות, אפשר לעיין במאמר בנושא יצירת פרופיל של הבנייה.

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

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

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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