Android Gradle Plugin 7.1.0 (ינואר 2022)

Android Gradle plugin 7.1.0 הוא גרסה ראשית שכוללת מגוון של תכונות ושיפורים חדשים.

7.1.3 (אפריל 2022)

העדכון המשני הזה כולל את תיקוני הבאגים הבאים:

  • בעיות כפולות של כיתות שדווחו על ידי R8

ב פוסט בבלוג בנושא תיקון 3 של Android Studio Bumblebee תוכלו למצוא רשימה מלאה של תיקוני הבאגים שכלולים במהדורה הזו.

7.1.2 (פברואר 2022)

העדכון המשני הזה כולל את תיקוני הבאגים הבאים:

  • Android Gradle Plugin 7.1.0-rc01 נכשל בהמרת קוד בייט של ASM במהלך בדיקות יחידה
  • סנכרון Gradle נכשל עם הודעת השגיאה "לא ניתן לטעון את הכיתה 'com.android.build.api.extension.AndroidComponentsExtension'".
  • אי אפשר להשתמש בחלק מבלוק ה-DSL החדשים מ-Groovy DSL בפלאגין של Android Gradle בגרסה 7.0.0
  • ממשק ה-API החדש לפרסום ב-AGP 7.1: קובץ ה-jar של javadoc שנוצר לא נחתם
  • ClassesDataSourceCache צריך להשתמש בגרסה האחרונה של Asm
  • Android Studio BumbleBee לא תמיד פורס את השינויים האחרונים

ב פוסט בבלוג בנושא Android Studio Bumblebee Patch 2 תוכלו למצוא רשימה מלאה של תיקוני הבאגים שכלולים במהדורה הזו.

7.1.1 (פברואר 2022)

העדכון המשני הזה תואם להפצה של Android Studio Bumblebee‏ Patch 1.

ב פוסט בבלוג בנושא תיקון 1 של Android Studio Bumblebee תוכלו לראות רשימה של תיקוני הבאגים שכלולים במהדורה הזו.

תאימות

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

עכשיו אפשר לשמור במטמון את משימת ניתוח ה-Lint

עכשיו אפשר להשתמש ב-AndroidLintAnalysisTask עם מטמון ה-build של Gradle. אם מפעילים את מטמון ה-build על ידי הגדרת org.gradle.caching=true בקובץ gradle.properties, הפלט של משימת ניתוח ה-lint יגיע ממטמון ה-build כשהדבר אפשרי.

לרוב, המשימה של ניתוח שגיאות בקוד היא צוואר הבקבוק הגדול ביותר כשמפעילים איתור שגיאות בקוד באמצעות הפלאגין Android Gradle. לכן, הפעלת המטמון של גרסת ה-build משפר את מהירות ה-build כשמריצים איתור שגיאות בקוד במצבים רבים. אתם אמורים לראות שיפור משמעותי בביצועים, לדוגמה, אם יש לכם פרויקט עם מספר מודולים וניקוי ספריית ה-build לפני הרצת איתור שגיאות בקוד בשרת ה-CI.

עכשיו אפשר להפנות במודולים של C/C++ למודולים אחרים של C/C++ באותו פרויקט

עכשיו אפשר להגדיר מודול של Gradle ל-Android עם קוד C/C++ שיפנה לקובצי כותרות ולקוד ספרייה במודול אחר של Gradle. הפרוטוקול Prefab משמש להעברת הכותרות והספריות בין מודולים של Gradle.

הדרישות

  • המודול צריכה חייב להיות CMake ולא ndk-build. תמיכה ב-ndk-build תדרוש עדכון עתידי של NDK. המודול publishing יכול להיות CMake או ndk-build.

  • המודול צריכה חייב להפעיל את prefab בקובץ build.gradle.

android {
  buildFeatures {
    prefab true
  }
}
  • המודול publishing צריך להפעיל את prefabPublishing בקובץ build.gradle.
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • המודול לשימוש צריך להפנות למודול לפרסום על ידי הוספת שורה בבלוק dependencies בקובץ build.gradle. לדוגמה:
dependencies {
  implementation project(':mylibrary')
}
  • המודול publishing חייב לחשוף חבילה באמצעות קטע prefab. לדוגמה:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • קובץ CMakeLists.txt של המודול המשתמש עשוי להשתמש ב-find_package() כדי לאתר את החבילה שפורסמה על ידי המודול היוצר. לדוגמה:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

להסבר נוסף על האופן שבו מגדירים צרכנים ויצרנים מקומיים של AAR באמצעות AGP, אפשר לעיין במאמר יחסי תלות מקוריים עם AGP.

הגדרות המאגר בקובץ settings.gradle

כשיוצרים פרויקט חדש ב-Android Studio Bumblebee, הקובץ build.gradle ברמה העליונה מכיל את הבלוק plugins, ואחריו קוד לניקוי ספריית ה-build:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

הגדרות המאגר שהיו בעבר בקובץ build.gradle ברמה העליונה נמצאות עכשיו בקובץ settings.gradle:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

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

מכשיר משופרת לכווץ משאבים

Android Studio Bumblebee כולל מכשיר משופר לצמצום משאבים שעוזר לצמצם את גודל האפליקציה.

תמיכה באפליקציות עם תכונות דינמיות

הטמעת ברירת המחדל של מכשיר דחיסת המשאבים של Android עודכנה בפלאגין Android Gradle 7.1.0-alpha09. ההטמעה החדשה תומכת בהקטנת אפליקציות עם תכונות דינמיות.

תכונה ניסיונית נוספת להקטנת גודל האפליקציה

הטמעת הכלי החדש לצמצום משאבים יכולה לצמצם את גודל האפליקציה הצפופה עוד יותר, על ידי שינוי טבלת המשאבים כדי להסיר משאבי ערכים שלא בשימוש והפניות למשאבי קבצים שלא בשימוש. הכלי החדש לקיצור משאבים יכול למחוק לחלוטין משאבי קבצים שלא בשימוש, וכך לצמצם עוד יותר את גודל האפליקציה. ההתנהגות הזו עדיין לא מופעלת כברירת מחדל, אבל אפשר לנסות אותה על ידי הוספת האפשרות הניסיונית android.experimental.enableNewResourceShrinker.preciseShrinking=true לקובץ gradle.properties של הפרויקט.

אנחנו מבקשים לדווח על בעיות שתמצאו ב-Resource Shrinker החדש או בדגל הניסיוני. כדי לעזור באבחון הבעיות או כפתרון זמני, אפשר לחזור להטמעה הקודמת על ידי הוספה של android.enableNewResourceShrinker=false ל-gradle.properties של הפרויקט. ה-shrinker החדש מחליף משאבים שמבוססים על קבצים שלא נמצאים בשימוש בקבצים מינימליים מעט שונים מאלה של shrinker של המשאב הקודם, אבל לא צפויה להיות לכך השפעה על סביבת זמן הריצה.

ההטמעה הישנה תוסר בפלאגין של Android Gradle בגרסה 8.0.0.

פרסום של וריאנט build

פלאגין Android Gradle מגרסה 7.1.0 ואילך מאפשר להגדיר אילו וריאנטים של גרסאות build לפרסם במאגר Apache Maven. AGP יוצר רכיב עם גרסאות build בודדות או מרובות על סמך שפת ה-DSL החדשה לפרסום, שבה אפשר להשתמש כדי להתאים אישית את אתר החדשות למאגר Maven. בהשוואה לגרסאות קודמות, כך אפשר גם למנוע עבודה מיותרת, כי לא נוצרים רכיבים כברירת מחדל. מידע נוסף זמין בדוגמת קוד הפרסום.

פרסום קובץ JAR של Javadoc

בגרסה 7.1.0 ואילך של AGP אפשר ליצור קובצי Javadoc ממקורות Java ו-Kotlin, ולפרסם קובצי JAR של Javadoc בנוסף לקובצי AAR לפרויקטים של ספריות. ה-Javadoc מתווסף לקובצי ה-POM ו-Gradle Module Metadata{:.external}. כדי להפעיל את התכונה הזו, מוסיפים את הערך withJavadocJar() בבלוק הפרסום singleVariant או multipleVariants. למידע נוסף, ראו דוגמת קוד של אפשרויות פרסום.

פרסום קובץ JAR של מקורות

בגרסה 7.1.0 ואילך של AGP אפשר לפרסם קובצי JAR של מקורות Java ו-Kotlin, בנוסף לקובצי AAR לפרויקטים של ספריות. המקורות מתווספים לקובצי POM ו-Gradle Module Metadata{:.external}. כדי להפעיל את התכונה הזו, מוסיפים את הערך withSourcesJar() בבלוק הפרסום singleVariant או multipleVariants. למידע נוסף, ראו דוגמת קוד של אפשרויות פרסום.

שינוי סמנטי של בלוק איתור שגיאות בקוד (lint)

כל השיטות של איתור שגיאות בקוד שמבטלים את רמת החומרה הנתונה של הבעיה – enable, disable/ignore, informational, warning, error, fatal – חלות עכשיו על סדר ההגדרה. לדוגמה, אם מגדירים בעיה חמורה ב-finalizeDsl(), היא מבטלת את ההשבתה ב-DSL הראשי. למידע נוסף, תוכלו לעיין במאמרי העזרה של lint{} ובנקודות ההרחבה ותהליך ה-build של Android.

הוסרו ממשקי API של AGP שפלאגין Gradle של Navigation Safe Args תלוי בהם. AGP 7.1 לא פועלת עם Navigation Safe Args בגרסאות 2.4.0-rc1 או 2.4.0, אבל היא תפעל עם הגרסאות 2.5.0-alpha01 ו-2.4.1. בינתיים, כפתרון זמני, תוכלו להשתמש ב-AGP 7.1 עם build של snapshot של Navigation Safe Args,‏ Navigation 2.5.0-SNAPSHOT. כדי להשתמש בגרסה הזו, פועלים לפי ההוראות ליצירת קובץ snapshot עם מזהה build‏ #8054565.

בנוסף, הגרסאות 2.4.1 ו-2.5.0 של Navigation Safe Args לא יפעלו יותר עם AGP 4.2. כדי להשתמש בגרסאות האלה של Safe Args, צריך להשתמש ב-AGP 7.0 ואילך.

השבתת היצירה האוטומטית של רכיבים

החל מגרסה 8.0 של AGP, יצירת רכיבים אוטומטית תושבת כברירת מחדל. בשלב הזה, AGP 7.1 יוצר באופן אוטומטי רכיב לכל וריאציה של ה-build, שיש לו שם זהה לווריאנט של ה-build, ורכיב all שמכיל את כל הווריאציות של ה-build. יצירת הרכיבים האוטומטית תושבת. כדי לעבור להתנהגות החדשה, צריך להשבית באופן ידני את היצירה האוטומטית של הרכיבים על ידי הגדרת android.disableAutomaticComponentCreation ל- true.. למידע נוסף, ראו שימוש בפלאגין Maven Publish.

תאימות למעקב אחר ביצועים ב-Firebase

AGP 7.1 לא תואם לפלאגין של Firebase Performance Monitoring Gradle בגרסה 1.4.0 ומטה. הכלי לשדרוג של AGP לא ידאג לעדכן את הפלאגין לגרסה 1.4.1 באופן אוטומטי. לכן, אם אתם משתמשים ב-firebase-perf ואתם רוצים לשדרג את AGP לגרסה 7.1, תצטרכו לבצע את השדרוג הזה באופן ידני.

בעיות מוכרות

בקטע הזה מתוארות בעיות ידועות בפלאגין של Android Gradle בגרסה 7.1.0.

בעיות בבדיקות יחידה של פרויקט אפליקציה שמשתמש בפלאגין Hilt

נתיב ה-classpath של בדיקת היחידה מכיל את כיתות האפליקציה שלא עברו הטמעה, כלומר Hilt לא מטמיע את כיתות האפליקציה כדי לטפל בהזרקת יחסי תלות כשמריצים בדיקות יחידה.

הבעיה הזו תיפתר במהדורה 7.1.1. אפשר לעיין בבעיה מס' 213534628.