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
  • AGP 7.1 new publishing API: created javadoc jar does not get signed
  • 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 כשהדבר אפשרי.

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

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

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

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

פרסום של וריאנט 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 של מקורות

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

שינוי סמנטי של בלוק Lint

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

הוסרו ממשקי API של AGP שפלאגין Navigation Safe Args Gradle תלוי בהם. 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 Performance Monitoring

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

בעיות מוכרות

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

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

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

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