Android Gradle Plugin 7.1.0 (ינואר 2022)
Android Gradle plugin 7.1.0 הוא גרסה מרכזית שכוללת מגוון של תכונות חדשות ושיפורים.
7.1.3 (אפריל 2022)
העדכון הקטן הזה כולל את תיקוני הבאגים הבאים:
- בעיות כפולות בכיתה שדווחו על ידי R8
כדי לראות רשימה מלאה של תיקוני באגים שנכללים בגרסה הזו, אפשר לעיין ב פוסט בבלוג בנושא Android Studio Bumblebee Patch 3.
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 לא תמיד פורס את השינויים האחרונים
כדי לראות את הרשימה המלאה של תיקוני הבאגים שנכללים בגרסה הזו, אפשר לעיין ב פוסט בבלוג בנושא תיקון 2 של Android Studio Bumblebee.
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 תקבל את הפלט שלה ממטמון ה-build כשהדבר אפשרי.
משימת הניתוח של lint היא לעיתים קרובות צוואר הבקבוק הגדול ביותר כשמריצים lint באמצעות הפלאגין של Android Gradle, ולכן הפעלת מטמון הבנייה משפרת את מהירות הבנייה כשמריצים 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
}
}
- מודול הצריכה צריך להפנות למודול הפרסום על ידי הוספת שורה בבלוק
dependencies
בקובץbuild.gradle
. לדוגמה:
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'
}
}
}
}
הסבר נוסף על הגדרת צרכנים ומפיקים של 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
פלאגין Android Gradle מגרסה 7.1.0 ואילך מאפשר לכם להגדיר אילו וריאציות של 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
. מידע נוסף זמין בדוגמת הקוד של אפשרויות הפרסום.
שינוי סמנטי בבלוק Lint
כל שיטות ה-lint שמבטלות את רמת החומרה שצוינה לבעיה – enable
, disable
/ignore
, informational
, warning
, error
, fatal
– פועלות עכשיו לפי סדר ההגדרה. לדוגמה,
הגדרת בעיה כקריטית ב-finalizeDsl()
תבטל את ההשבתה שלה ב-DSL הראשי. מידע נוסף מופיע במאמרי העזרה בנושא lint{}
חסימת הפניות ובנושא תהליך בניית Android ונקודות ההרחבה.
תאימות ל-Safe Args לניווט
ממשקי ה-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 עם גרסת snapshot של Navigation Safe Args, Navigation 2.5.0-SNAPSHOT. כדי להשתמש בגרסת ה-snapshot, פועלים לפי ההוראות לשימוש ב-snapshot עם מזהה build מספר #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
AGP 7.1 לא תואם לתוסף Firebase Performance Monitoring Gradle מגרסה 1.4.0 ומטה. הכלי AGP Upgrade Assistant לא מעדכן אוטומטית את הפלאגין לגרסה 1.4.1, ולכן אם אתם משתמשים ב-firebase-perf
ורוצים לשדרג את AGP לגרסה 7.1, אתם צריכים לבצע את השדרוג הזה באופן ידני.
בעיות מוכרות
בקטע הזה מתוארות בעיות מוכרות שקיימות בפלאגין Android Gradle 7.1.0.
בעיות בבדיקות יחידה של פרויקט אפליקציה שמשתמש בפלאגין Hilt
נתיב המחלקה של בדיקת היחידה מכיל את מחלקות האפליקציה שלא עברו אינסטרומנטציה, מה שאומר ש-Hilt לא מבצע אינסטרומנטציה של מחלקות האפליקציה כדי לטפל בהזרקת תלות כשמריצים בדיקות יחידה.
הבעיה הזו תיפתר בגרסה 7.1.1, issue #213534628.