פלאגין של Android Gradle 7.1.0 (ינואר 2022)
פלאגין של Android Gradle 7.1.0 הוא גרסה מרכזית שכוללת מגוון של תכונות ושיפורים חדשים.
7.1.3 (אפריל 2022)
העדכון הקטן הזה כולל את תיקוני הבאגים הבאים:
- בעיות כפולות בכיתה שדווחו על ידי R8
כדי לראות רשימה מלאה של תיקוני באגים שנכללים בגרסה הזו, אפשר לעיין ב פוסט בבלוג בנושא Android Studio Bumblebee Patch 3.
7.1.2 (פברואר 2022)
העדכון הקטן הזה כולל את תיקוני הבאגים הבאים:
- פלאגין של Android Gradle 7.1.0-rc01 נכשל בביצוע טרנספורמציה של בייטקוד (bytecode) של ASM במהלך בדיקות יחידה (unit testing)
- הסנכרון של 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.
כדי לראות רשימה של תיקוני באגים שנכללים בגרסה הזו, אפשר לעיין ב פוסט בבלוג בנושא Android Studio Bumblebee Patch 1.
תאימות
| גרסת המינימום | גרסת ברירת המחדל | הערות | |
|---|---|---|---|
| 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 תואם עכשיו למטמון של Gradle
build. אם מפעילים את מטמון הבנייה על ידי הגדרת org.gradle.caching=true בקובץ gradle.properties, משימת הניתוח של lint תקבל את הפלט שלה ממטמון הבנייה כשאפשר.
משימת הניתוח של כלי לאיתור שגיאות בקוד (lint) היא לעיתים קרובות צוואר הבקבוק הגדול ביותר כשמריצים כלי לאיתור שגיאות בקוד (lint) באמצעות פלאגין של Android Gradle, ולכן הפעלת מטמון ה-build משפרת את מהירות ה-build כשמריצים כלי לאיתור שגיאות בקוד (lint) במצבים רבים. אפשר לראות שיפור משמעותי בביצועים, למשל, אם יש לכם פרויקט עם כמה מודולים ואתם מנקים את ספריית ה-build לפני שמריצים את lint בשרת ה-CI.
מודולים של C/C++ יכולים עכשיו להפנות למודולים אחרים של C/C++ באותו פרויקט
עכשיו אפשר להגדיר מודול Gradle Android עם קוד C/C++ כך שיפנה לקובצי כותרת ולקוד ספריות במודול Gradle אחר. הפרוטוקול Prefab משמש להעברת הכותרות והספריות בין מודולי Gradle.
דרישות
-
מודול השימוש חייב להיות
CMakeולאndk-build. כדי לתמוך ב-ndk-build, יהיה צורך בעדכון NDK בעתיד. מודול הפרסום יכול להיותCMakeאוndk-build. -
במודול הצרכן צריך להפעיל את
prefabבקובץbuild.gradle.
android {
buildFeatures {
prefab true
}
}- במודול publishing צריך להפעיל את
prefabPublishingבקובץbuild.gradle.
android {
buildFeatures {
prefabPublishing true
}
}- במודול הצרכן צריך להוסיף הפניה למודול הפרסום על ידי הוספת שורה בקובץ
build.gradleבבלוקdependencies. לדוגמה:
dependencies {
implementation project(':mylibrary')
}- מודול הפרסום צריך לחשוף חבילה באמצעות קטע
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)- צריך לצרף קובץ STL אחד לכל האפליקציה. לכן, לדוגמה, גם מודולים של צריכה וגם מודולים של פרסום יכולים להשתמש ב-STL משותף של C++.
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
}
}
}
}הסבר נוסף על הגדרת צרכנים ומפיקים של C/C++ 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 של הפרויקט.
אם נתקלתם בבעיות בכלי החדש לצמצום משאבים או בדגל הניסיוני, אתם מוזמנים לדווח עליהן. כדי לאבחן בעיות, או כפתרון זמני, אפשר לחזור להטמעה הקודמת על ידי הוספת android.enableNewResourceShrinker=false לפרויקט gradle.properties.
הכלי החדש להקטנת קבצים מחליף משאבים לא בשימוש שמבוססים על קבצים בקבצים מינימליים שונים במקצת מאלה של הכלי הקודם להקטנת משאבים, אבל לא צפוי שתהיה לכך השפעה על זמן הריצה.
ההטמעה הישנה מתוכננת להסרה בפלאגין Android Gradle 8.0.0.
פרסום וריאנט build
החל מגרסה 7.1.0 של פלאגין של Android Gradle, אפשר להגדיר אילו וריאציות של build יפורסמו במאגר Apache Maven. AGP יוצר רכיב עם וריאנט בנייה אחד או יותר על סמך ה-DSL החדש לפרסום, שבו אפשר להשתמש כדי להתאים אישית פרסום למאגר Maven. בנוסף, בהשוואה לגרסאות קודמות, הגרסה הזו חוסכת עבודה מיותרת כי לא נוצרים רכיבים כברירת מחדל. מידע נוסף זמין בדוגמת קוד לפרסום.
פרסום קובץ Javadoc JAR
ב-AGP 7.1.0 ואילך אפשר ליצור 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 publishing. מידע נוסף זמין בדוגמת קוד של אפשרויות פרסום.
שינוי סמנטי בבלוק Lint
כל שיטות ה-lint שמבטלות את רמת החומרה שצוינה לבעיה – enable, disable/ignore, informational, warning, error, fatal – פועלות עכשיו לפי סדר ההגדרה. לדוגמה,
הגדרת בעיה כקריטית ב-finalizeDsl()
תבטל עכשיו את ההשבתה שלה ב-DSL הראשי. מידע נוסף זמין במאמרי העזרה בנושא lint{} חסימת הפניות ותהליך בניית Android ונקודות ההרחבה.
תאימות של Safe Args לניווט
הוסרו ממשקי AGP API שהפלאגין Navigation Safe Args Gradle תלוי בהם. AGP 7.1 לא פועל עם גרסאות 2.4.0-rc1 או 2.4.0 של Navigation Safe Args, אבל הוא פועל עם גרסאות 2.5.0-alpha01 ו-2.4.1. בינתיים, כפתרון עקיף, אתם יכולים להשתמש ב-AGP 7.1 עם גרסת snapshot של Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. כדי להשתמש בגרסת ה-snapshot, פועלים לפי ההוראות לשימוש ב-snapshot עם מזהה גרסה #8054565.
בנוסף, גרסאות 2.4.1 ו-2.5.0 של Navigation Safe Args לא יפעלו יותר עם AGP 4.2. כדי להשתמש בגרסאות האלה של Safe Args, צריך להשתמש ב-AGP 7.0 ואילך.
השבתת יצירה אוטומטית של רכיבים
החל מ-AGP 8.0, יצירת רכיבים אוטומטית מושבתת כברירת מחדל.
AGP 7.1 יוצר באופן אוטומטי רכיב לכל וריאנט build,
שלו יש את אותו שם כמו וריאנט ה-build, ורכיב all
שכולל את כל וריאנטים ה-build. היצירה האוטומטית של הרכיב הזה תושבת. כדי לעבור להתנהגות החדשה, צריך להשבית באופן ידני את היצירה האוטומטית של רכיבים על ידי הגדרת android.disableAutomaticComponentCreation ל- true.. מידע נוסף זמין במאמר בנושא שימוש בתוסף Maven Publish.
תאימות של מעקב אחרי ביצועים ב-Firebase
גרסה 7.1 של AGP לא תואמת לגרסה 1.4.0 ומטה של התוסף מעקב אחר ביצועים ב-Firebase Gradle. הכלי AGP Upgrade Assistant לא מעדכן אוטומטית את הפלאגין לגרסה 1.4.1, לכן אם אתם משתמשים ב-firebase-perf ורוצים לשדרג את AGP לגרסה 7.1, אתם צריכים לבצע את השדרוג הזה באופן ידני.
בעיות מוכרות
בקטע הזה מתוארות בעיות מוכרות שקיימות בפלאגין של Android Gradle 7.1.0.
בעיות בבדיקות יחידה של פרויקט אפליקציה שמשתמש בפלאגין Hilt
ה-classpath של בדיקת היחידה מכיל את מחלקות האפליקציה שלא עברו אינסטרומנטציה, מה שאומר ש-Hilt לא מבצע אינסטרומנטציה של מחלקות האפליקציה כדי לטפל בהזרקת תלות (dependency injection) כשמריצים בדיקות יחידה.
הבעיה הזו תיפתר בגרסה 7.1.1. אפשר לעיין בבעיה מספר 213534628.