בדף הזה מופיעות הערות לגבי גרסאות טרום-השקה של הפלאגין Android Gradle (AGP).
פלאגין Android Gradle 9.0
פלאגין Android Gradle 9.0 הוא גרסה ראשית חדשה של AGP, והוא כולל שינויים בממשקי ה-API ובהתנהגות.
כדי לעדכן לגרסה Android Gradle plugin 9.0.0-alpha04, צריך להשתמש בAndroid Gradle plugin Upgrade Assistant ב-Android Studio Narwhal 4 Feature Drop | 2025.1.4.
הכלי לשדרוג AGP עוזר לשמר התנהגויות קיימות כשמשדרגים את הפרויקט, כשזה מתאים, ומאפשר לשדרג את הפרויקט לשימוש ב-AGP 9.0, גם אם אתם לא מוכנים להשתמש בכל הגדרות ברירת המחדל החדשות ב-AGP 9.0.
תאימות
רמת ה-API המקסימלית של Android שנתמכת על ידי Android Gradle plugin בגרסה 9.0.0-alpha04 היא רמת API 36.
פלאגין Android ל-Gradle 9.0.0-alpha04 דורש Gradle 9.0.0.
גרסת מינימום | גרסת ברירת המחדל | הערות | |
---|---|---|---|
Gradle | 9.0.0 | 9.0.0 | יש מידע נוסף במאמר בנושא עדכון Gradle. |
SDK Build Tools | 36.0.0 | 36.0.0 | התקנה או הגדרה של SDK Build Tools. |
NDK | לא רלוונטי | 28.2.13676358 | התקנה או הגדרה של גרסה אחרת של NDK. |
JDK | 17 | 17 | מידע נוסף זמין במאמר בנושא הגדרת גרסת ה-JDK. |
הטמעות פנימיות של DSL וממשק API של וריאנטים שהוצא משימוש מחייבות עכשיו הבעת הסכמה מפורשת
לפלאגין Android Gradle יש עכשיו משטח API מוגדר, עם ממשקי API נתמכים שמוגדרים ב-com.android.tools.build:gradle-api
maven artifact.
כדי לשמור על תאימות לתוספים בינאריים קיימים ולסקריפטים לבנייה, ההטמעות הקודמות של DSL שקדמו לממשק ה-API המוגדר הזה עדיין נחשפו כברירת מחדל ב-AGP 8.13 ובגרסאות קודמות. האפשרות הזו מאפשרת לקוד בתוספים של Gradle ולסקריפטים של build לגשת גם לפרטי ההטמעה הפנימיים של ה-DSL וגם לממשקי ה-API שהוצאו משימוש android.applicationVariants
, android.libraryVariants
, android.testVariants
ו-android.unitTestVariants
, שיוסרו בשנת 2026 ב-AGP 10.
כדי להבליט את המעבר הזה, אי אפשר לגשת כברירת מחדל ל-API של גרסת ה-legacy ול-DSL הפנימי בפלאגין Android Gradle בגרסה 9.0.0-alpha04.
כדי לחזור להשתמש ב-API שהוצא משימוש, צריך להגדיר את הערך
android.newDsl=false
ב-gradle.properties
.
במהלך סדרת אלפא 9.0, אנחנו פונים ליוצרי פלאגינים כדי לעזור להם להתאים ולפרסם פלאגינים שתואמים באופן מלא למצבים החדשים, ונשפר את כלי העזרה לשדרוג AGP ב-Android Studio כדי להנחות אתכם בתהליך המיגרציה.
Kotlin מובנה
הפלאגין Android Gradle 9 כולל תמיכה מובנית בהידור של Kotlin, ומחליף את הפלאגין Kotlin שמוחל בנפרד. כך קל יותר לשלב את התוסף עם AGP, נמנעים משימוש בממשקי API שיצאו משימוש ומשפרים את הביצועים במקרים מסוימים.
לפלאגין Android Gradle 9 יש תלות בזמן ריצה בפלאגין Kotlin Gradle 2.2.0, שהיא הגרסה המינימלית שנדרשת לתמיכה מובנית ב-Kotlin.
אפשר לבטל את ההסכמה לשימוש ב-Kotlin המובנה על ידי הגדרת
android.builtInKotlin=false
.
אם ביטלתם את ההסכמה ואתם צריכים להשתמש בגרסה ישנה יותר של הפלאגין kotlin
Gradle, אתם יכולים לכפות את השדרוג לאחור
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
שינויים בהתנהגות
לפלאגין Android Gradle 9.0 יש את ההתנהגויות החדשות הבאות:
התנהגות | המלצה |
---|---|
פלאגין Android Gradle בגרסה 9.0 משתמש ב-NDK בגרסה r28c כברירת מחדל.
|
מומלץ לציין במפורש את גרסת ה-NDK שבה רוצים להשתמש. |
כברירת מחדל, פלאגין Android Gradle 9.0 מחייב את הצרכנים של ספרייה להשתמש באותה גרסה או בגרסה חדשה יותר של SDK למהדר. |
כשמשתמשים בספרייה, צריך להשתמש באותו SDK או ב-SDK חדש יותר.
אם זה לא אפשרי, או שאתם רוצים לתת לצרכני ספרייה שפרסמתם יותר זמן לעבור לגרסה החדשה, אתם צריכים להגדיר את AarMetadata.minCompileSdk באופן מפורש.
|
AGP 9.0 כולל עדכונים בערכי ברירת המחדל של מאפייני Gradle הבאים. כך תוכלו לבחור אם לשמור על ההתנהגות של AGP 8.13 כשמשדרגים:
נכס | פעולה | שינוי מ-AGP 8.13 ל-AGP 9.0 | המלצה |
---|---|---|---|
android.newDsl |
שימוש בממשקי DSL החדשים, בלי לחשוף את ההטמעות הקודמות של בלוק android .המשמעות היא גם שאי אפשר יותר לגשת לגרסה הקודמת של Variant API, כמו android.applicationVariants .
|
false ← true |
אפשר לבטל את ההסכמה בהגדרה
android.newDsl=false .אחרי שמוודאים שכל הפלאגינים והלוגיקה של הבנייה שבהם הפרויקט משתמש תואמים, מסירים את ההסכמה. |
android.builtInKotlin |
הוספנו תמיכה בהידור קוד Kotlin ישירות בפלאגין Android Gradle, ללא הפלאגין org.jetbrains.kotlin.android .
|
false ← true |
אם אפשר, מומלץ להשתמש ב-Kotlin המובנה ולהסיר את השימוש בתוסף org.jetbrains.kotlin.android .
אם לא, כדי לבטל את ההסכמה, מגדירים את android.builtInKotlin=false
|
android.uniquePackageNames |
האפשרות הזו מוודאת שלכל ספרייה יש שם חבילה ייחודי. | false ← true |
מציינים שמות חבילות ייחודיים לכל הספריות בפרויקט. אם זה לא אפשרי, אפשר להשבית את הדגל הזה בזמן ההעברה. |
android.dependency.useConstraints |
ההגדרה הזו קובעת את השימוש באילוצי תלות בין תצורות. ברירת המחדל ב-AGP 9.0 היא false , שמשתמשת רק באילוצים בבדיקות של מכשירי אפליקציה (AndroidTest).
הגדרת הערך true תחזיר את ההתנהגות של גרסה 8.13.
|
true ← false |
אל תשתמשו באילוצי תלות בכל מקום אלא אם אתם צריכים אותם. אישור ברירת המחדל החדשה של הדגל הזה מאפשר גם לבצע אופטימיזציות בתהליך ייבוא הפרויקט, וכך לקצר את זמן הייבוא של גרסאות build עם הרבה פרויקטים משניים של ספריות Android. |
aandroid.enableAppCompileTimeRClass |
הידור קוד באפליקציות מול מחלקת R לא סופית, כדי שהידור האפליקציה יהיה זהה להידור הספרייה. השינוי הזה משפר את המדד 'המרות מצטברות' וסולל את הדרך לשיפורים עתידיים בביצועים של תהליך עיבוד המשאבים. |
false ← true |
בפרויקטים רבים אפשר פשוט לאמץ את ההתנהגות החדשה בלי לבצע שינויים בקוד המקור. אם משתמשים בשדות של מחלקת R במקומות שבהם נדרש קבוע, כמו במקרים של switch, צריך לבצע refactoring כדי להשתמש בהצהרות if בשרשרת. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
משתמש בגרסת ה-SDK של הקומפילציה כערך ברירת המחדל של גרסת ה-SDK של היעד באפליקציות ובבדיקות. לפני השינוי הזה, גרסת ה-SDK לטירגוט הייתה מוגדרת כברירת מחדל לגרסת ה-SDK המינימלית. |
false ← true |
צריך לציין במפורש את גרסת ה-SDK של היעד לאפליקציות ולבדיקות. |
android.onlyEnableUnitTestForTheTestedBuildType |
יוצר רק רכיבי בדיקות יחידה לסוג ה-build שנבדק. בפרויקט ברירת המחדל, התוצאה היא בדיקת יחידה אחת לניפוי באגים, בעוד שההתנהגות הקודמת הייתה הפעלת בדיקות יחידה לניפוי באגים או לגרסה. |
false ← true |
אם הפרויקט לא דורש הפעלת בדיקות גם לניפוי באגים וגם לפרסום, לא צריך לבצע שינוי. |
android.proguard.failOnMissingFiles |
ה-build נכשל עם שגיאה אם אחד מקובצי השמירה שצוינו ב-AGP DSL לא קיים בדיסק. לפני השינוי הזה, שגיאות כתיב בשמות של קבצים היו גורמות למערכת להתעלם מהקבצים בלי להציג הודעה. | false ← true |
הסרת הצהרות לא חוקיות של קובצי ProGuard |
android.r8.optimizedResourceShrinking |
מאפשר ל-R8 לשמור פחות משאבי Android על ידי התייחסות משותפת למחלקות ולמשאבי Android. | false ← true |
אם כללי השמירה של הפרויקט כבר הושלמו, לא צריך לבצע שינוי. |
android.r8.strictFullModeForKeepRules |
מאפשר ל-R8 לשמור פחות, כי הוא לא שומר באופן מרומז את בנאי ברירת המחדל כששומרים מחלקה.
כלומר, -keep class A לא מרמז יותר על -keep class A { <init>(); } |
false ← true |
אם כללי השמירה של הפרויקט כבר הושלמו, לא צריך לבצע שינוי.
מחליפים את -keep class A
ב--keep class A { <init>(); }
בכללי השמירה של הפרויקט, בכל המקרים שבהם צריך לשמור את בנאי ברירת המחדל.
|
android.defaults.buildfeatures.shaders |
הפעלת קומפילציה של shader בכל פרויקטי המשנה | true ← false |
כדי להפעיל קומפילציה של Shader רק בפרויקטים משניים שמכילים Shader שצריך לקמפל, מגדירים את הערך הבא בקובצי ה-build של Gradle של הפרויקטים האלה:
android { buildFeatures { shaders = true } } |
תכונות שהוסרו
בפלאגין Android Gradle 9.0, הפונקציונליות הבאה הוסרה:
- התמיכה בהטמעת אפליקציות ל-Wear OS
ב-AGP 9.0 הוסרה התמיכה בהטמעת אפליקציות ל-Wear OS, שלא נתמכת יותר ב-Play. זה כולל הסרה של ההגדרות שלwearApp
ושל ה-DSL שלAndroidSourceSet.wearAppConfigurationName
. במאמר הפצה ב-Wear OS מוסבר איך לפרסם את האפליקציה ב-Wear OS. androidDependencies
וsourceSets
דיווח על משימה
שינוי ב-DSL
בפלאגין Android Gradle 9.0 בוצעו שינויים ב-DSL שעלולים לגרום לכשלים:
הוסרה הפרמטריזציה של
CommonExtension
.השינוי הזה הוא שינוי שובר תאימות ברמת המקור, שמטרתו למנוע שינויים שוברי תאימות עתידיים ברמת המקור. אבל המשמעות שלו היא גם ששיטות החסימה צריכות לעבור מ-
CommonExtension
ל-ApplicationExtension
, LibraryExension
, DynamicFeatureExtension
ו-TestExtension
.כשמשדרגים את הפרויקט ל-AGP 9.0, צריך לבצע רפקטורינג של קוד הפלאגין Gradle שמשתמש בפרמטרים האלה או בשיטות הבלוק. לדוגמה, התוסף הבא עודכן כדי להסיר את פרמטר הסוג ולא להסתמך על שיטות הבלוק שהוסרו:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }
AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }
בתוספים שמטרגטים טווח של גרסאות AGP, שימוש בפונקציית ה-getter ישירות תואם בינארית לגרסאות AGP נמוכות מ-9.0.
הוסר DSL
הפלאגין Android Gradle 9.0 מסיר את:
AndroidSourceSet.jni
, כי הוא לא היה תקין.
AndroidSourceSet.wearAppConfigurationName
, כי הוא קשור להסרת התמיכה באפליקציית Wear OS המוטמעת.BuildType.isRenderscriptDebuggable
, כי הוא לא היה תקין.
ComponentBuilder.enabled
. הוא הוחלף ב-ComponentBuilder.enable
.
DependencyVariantSelection
. הוא הוחלף ב-DependencySelection
, שמוצג כ-kotlin.android
Installation.installOptions(String)
. הוא מוחלף במאפיין הניתן לשינוי שלInstallation.installOptions
.
VariantBuilder.targetSdk
ו-targetSdkPreview
, כי הן לא היו משמעותיות בספריות. במקום זאת, אתם צריכים להשתמש ב-GeneratesApkBuilder.targetSdk
או ב-GeneratesApkBuilder.targetSdkPreview
.הבלוק
PostProcessing
, שהוא ניסיוני אבל אף פעם לא יציב.
ProductFlavor.setDimension
, שמוחלף במאפייןdimension
LanguageSplitOptions
, שהיה שימושי רק ל-Google Play ללא התקנה, שהוצא משימוש.
Variant.unitTest
, כי הוא לא רלוונטי לפלאגיןcom.android.test
. המאפייןunitTest
זמין בסוגי המשנהVariantBuilder
שלHasUnitTest
.
VariantBuilder.enableUnitTest
, כי הוא לא רלוונטי לפלאגיןcom.android.test
. המאפייןenableUnitTest
זמין בסוגי המשנהVariantBuilder
שלHasUnitTestBuilder
.הסוג
VariantBuilder.unitTestEnabled
הוסר לטובת הסוגenableUnitTest
, ששמו עקבי יותר, בסוגי המשנהVariantBuilder
שמרחיבים אתHasUnitTestBuilder
.
הוסרו מאפייני Gradle
המאפיינים הבאים של Gradle נוספו בהתחלה כדרכים להשבית באופן גלובלי תכונות שהופעלו כברירת מחדל.
התכונות האלה מושבתות כברירת מחדל מגרסה AGP 8.0 ומטה. כדי ליצור בנייה יעילה יותר, מומלץ להפעיל את התכונות האלה רק בפרויקטים המשניים שמשתמשים בהן.
נכס | פעולה | החלפה |
---|---|---|
android.defaults.buildfeatures.aidl |
ההגדרה הזו מאפשרת קומפילציה של AIDL בכל פרויקטי המשנה |
כדי להפעיל קומפילציה של AIDL רק בפרויקטים משניים שבהם יש מקורות AIDL, צריך להגדיר את המאפיין הבא בקובצי ה-build של Gradle של הפרויקטים האלה:
android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript |
הפעלת הידור של RenderScript בכל פרויקטי המשנה |
כדי להפעיל קומפילציה של renderscript רק בפרויקטים משניים שבהם יש מקורות של renderscript, צריך להגדיר את המאפיין הבא בקובצי ה-build של Gradle של הפרויקטים האלה:
android { buildFeatures { renderScript = true } } |
ממשקי API שהוסרו
הפלאגין Android Gradle 9.0 מסיר את:
- ממשקי ה-API שהוצאו משימוש והושבתו,
BaseExtension.registerTransform
שנותרו רק כדי לאפשר קומפילציה מול הגרסה העדכנית ביותר של AGP תוך טירגוט הפעלה ב-AGP 4.2 או בגרסאות קודמות.
מאפייני Gradle שנאכפים
אם מגדירים את מאפייני Gradle הבאים, AGP 9.0 מחזיר שגיאה.
הכלי Android Gradle plugin Upgrade Assistant לא ישדרג פרויקטים ל-AGP 9.0 שמשתמשים במאפיינים האלה.
נכס | פעולה |
---|---|
android.r8.integratedResourceShrinking |
הפחתת משאבים מופעלת עכשיו תמיד כחלק מ-R8, וההטמעה הקודמת הוסרה. |