מערכת ה-build של Gradle ב-Android Studio מאפשרת לכלול משתמשים חיצוניים בינאריים או מודולים אחרים של ספרייה ב-build שלך כיחסי תלות. של יחסי התלות הזאת יכולים להיות ממוקמים במחשב שלכם או במאגר מרוחק, הם נכללים באופן אוטומטי גם ביחסי תלות ארעיים שהם מצהירים עליהם. בדף הזה נסביר איך להשתמש ביחסי תלות בפרויקט Android, כולל פרטים על התנהגויות ותצורות שספציפיות הפלאגין Android Gradle (AGP). למדריך מושגים מעמיק יותר של Gradle של יחסי התלות, צריך לראות גם מדריך Gradle לניהול תלות - אבל חשוב לזכור שבפרויקט Android צריך להשתמש רק הגדרות התלות שמוגדרות בדף הזה.
הוספת תלות של ספרייה או פלאגין
הדרך הטובה ביותר להוסיף ולנהל יחסי תלות של גרסאות היא להשתמש בקטלוגים של גרסאות, השיטה שבה משתמשים פרויקטים חדשים כברירת מחדל. בקטע הזה נפרט את סוגי הגדרות אישיות שמשמשים לפרויקטים של Android; לעיין מסמכי תיעוד של Gradle תוכלו לראות אפשרויות נוספות. דוגמה לאפליקציה שמשתמשת בקטלוגים של גרסאות: עכשיו ב-Android. אם כבר הגדרתם יחסי תלות של ה-build ללא קטלוגים של גרסאות ויש לי פרויקט עם מודולים מרובים, מומלץ מעבר.
לקבלת הדרכה להוספה ולניהול של יחסי תלות מותאמים (לא נפוץ), אפשר להיכנס לכתובת יחסי תלות במקור.
בדוגמה הבאה, אנחנו מוסיפים קוד בינארי מרחוק.
תלות (Jetpack Macrobenchmark
ספרייה), מודול הספרייה המקומית
תלות (myLibrary
) ופלאגין
או תלות בפרויקט שלנו (הפלאגין של Android Gradle). ריכזנו כאן את ההגדרות הכלליות
כדי להוסיף את יחסי התלות האלה לפרויקט:
הוסף כינוי לגרסת התלות הרצויה הקטע
[versions]
בקובץ קטלוג הגרסאות, שנקראlibs.versions.toml
(בספרייהgradle
ב- תצוגת פרויקט או סקריפטים של Gradle בתצוגת Android):[versions] agp = "8.3.0" androidx-macro-benchmark = "1.2.2" my-library = "1.4" [libraries] ... [plugins] ...
כינויים יכולים לכלול מקפים או קווים תחתונים. כתובות האימייל החלופיות האלה יוצרות ערכים מקוננים שאפשר להפנות אליו בסקריפטים של build. קובצי העזר מתחילים בשם של של הקטלוג, החלק
libs
מתוךlibs.versions.toml
. מתי באמצעות קטלוג גרסאות אחד, מומלץ לשמור את ערך ברירת המחדל 'libs'.צריך להוסיף כינוי לתלות ב-
[libraries]
(עבור קבצים בינאריים מרוחקים או מודולים של ספרייה מקומית) או[plugins]
(עבור יישומי פלאגין) של הקובץlibs.versions.toml
.[versions] ... [libraries] androidx-benchmark-macro = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "androidx-macro-benchmark" } my-library = { group = "com.myapplication", name = "mylibrary", version.ref = "my-library" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }
חלק מהספריות זמינות במסמך Bill of Materials (BOM) שפורסם קבוצות משפחתיות של ספריות ואת הגרסאות שלהן. אפשר לכלול BOM של גרסאות build וקובצי build, כדי לאפשר לו לנהל את הגרסאות האלו בשבילכם. צפייה מידע נוסף על חיוב החומרים.
להוסיף הפניה לכינוי של תלות לסקריפט ה-build של מודולים שדורשים את התלות. המרת הכינוי קווים תחתונים ומקפים לנקודות כשמפנות אותו מסקריפט של build. סקריפט ה-build שלנו ברמת המודול ייראה כך:
Kotlin
plugins { alias(libs.plugins.androidApplication) } dependencies { implementation(libs.androidx.benchmark.macro) implementation(libs.my.library) }
מגניב
plugins { alias 'libs.plugins.androidApplication' } dependencies { implementation libs.androidx.benchmark.macro implementation libs.my.library }
הפניות ליישומי פלאגין כוללות את
plugins
אחרי שם הקטלוג, וגם הפניות לגרסאות כוללות אתversions
אחרי שם הקטלוג (גרסה הפניות הן לא נפוצות, ראו יחסי תלות עם אותם מספרי גרסאות כדי לראות דוגמאות של הפניות לגרסאות). לספרייה קובצי עזר לא כוללים תוחםlibraries
, ולכן אי אפשר להשתמשversions
אוplugins
בתחילת הספרייה כתובת אימייל חלופית.
הגדרת יחסי תלות
בתוך הבלוק dependencies
, אפשר להצהיר על תלות של ספרייה באמצעות
של כמה הגדרות תלות שונות (כמו implementation
מוצגות
מוקדם יותר). כל תצורת תלות מספקת ל-Gradle
הוראות לשימוש בתלות. הטבלה הבאה מתארת כל אחד מהסעיפים הבאים
התצורות שבהן ניתן להשתמש בגלל תלות בפרויקט Android שלך.
הגדרות אישיות | התנהגות |
---|---|
implementation |
Gradle מוסיף את התלות ל-Classpath
חבילות את התלות בפלט של ה-build. כאשר
מגדיר תלות של implementation ,
מודיעה ל-Gradle שאתם לא רוצים שהמודול ידליף
או תלות במודולים אחרים בזמן ההידור. כלומר, התלות
לא זמינה למודולים אחרים שתלויים
של מודל טרנספורמר.
שימוש בתצורת התלות במקום
התוצאות של |
api |
Gradle מוסיף את התלות ל-classpath ול-build
הפלט. כשהמודול כולל תלות ב-api ,
להודיע ל-Gradle שהמודול רוצה לייצא באופן זמני
שתלויות במודולים אחרים, כדי שהיא תהיה זמינה להם
גם סביבת זמן ריצה וגם זמן הידור.
חשוב להשתמש בתצורה הזו בזהירות ורק עם יחסי תלות
אתם צריכים לייצא באופן זמני לצרכנים אחרים ב-upstream. אם
התלות של |
compileOnly |
Gradle מוסיף את התלות ל-classpath בלבד
(כלומר, הוא לא נוסף לפלט של ה-build). האפשרות הזאת שימושית במקרים
אתם יוצרים מודול של Android, וצריך להשתמש בתלות
compilation, אבל לא חייבים להציג אותו בזמן הריצה. עבור
לדוגמה, אם הסתמכת על ספרייה שכוללת רק הערות בזמן הידור – לרוב משמשות ליצירת קוד אבל לעיתים קרובות היא לא כלולה בפלט ה-build – אפשר לסמן את הספרייה הזו compileOnly .
אם משתמשים בתצורה הזו, מודול הספרייה כולל תנאי זמן ריצה כדי לבדוק אם התלות ולאחר מכן לשנות קלות את ההתנהגות שלו כדי שהוא עדיין יוכל אם היא לא סופקה. זה עוזר להקטין את הגודל של באפליקציה הסופית בכך שהיא לא מוסיפה יחסי תלות זמניים שאינם חיוניים.
הערה: לא ניתן להשתמש ב- |
runtimeOnly |
Gradle מוסיפה את התלות לפלט ה-build בלבד, לשימוש
במהלך זמן הריצה. כלומר, הוא לא נוסף לנתיב הכיתה של הידור.
בשימוש לעיתים רחוקות ב-Android, אבל בדרך כלל בשימוש בשרת
כדי לספק הטמעות של רישום ביומן. לדוגמה,
יכולה להשתמש ב-API לרישום ביומן שלא כולל
יישום בפועל. צרכנים של הספרייה הזו יכולים להוסיף אותה בתור
תלות ב-implementation וכוללים
תלות של runtimeOnly ברישום ביומן בפועל
שבו צריך להשתמש.
|
ksp |
ההגדרות האלה מספקות ספריות שמעבדות הערות וסמלים אחרים בקוד שלך לפני שהוא עבר הידור. לרוב הם לאמת את הקוד או ליצור קוד נוסף, וכך לצמצם את כמות הקוד צריכים לכתוב. כדי להוסיף תלות כזו, צריך להוסיף אותה לנתיב ה-classpath של מעבד ההערות באמצעות ההגדרות הפלאגין Android Gradle מניח שתלות היא הערה אם קובץ ה-JAR שלו מכיל את הקובץ הבא:
אם הפלאגין מזהה מעבד הערות שנמצא להדר את ה-classpath, הוא יפיק שגיאת build.
כדי להחליט באיזו הגדרה להשתמש, כדאי להביא בחשבון את הבאים:
למידע נוסף על השימוש במעבדי הערות: הוספת מעבדי הערות. |
lintChecks |
צריך להשתמש בהגדרה הזו כדי לכלול ספרייה שמכילה איתור שגיאות בקוד בדיקות שרוצים ש-Gradle יבצע כשמפתחים את האפליקציה ל-Android פרויקט. חשוב לשים לב שהצעות AAR שמכילות קובץ |
lintPublish |
שימוש בהגדרה הזו בפרויקטים של ספריית Android כדי לכלול איתור שגיאות בקוד
בדיקות שרוצים להדר ב-Gradle לקובץ lint.jar
וחבילה ב-AAR. הדבר גורם לפרויקטים שצורכים
AAR כדי להחיל גם את בדיקות השגיאות האלה. אם בעבר השתמשתם
הגדרת התלות של lintChecks כדי לכלול איתור שגיאות בקוד
של הבדיקות ב-AAR שפורסם, צריך להעביר את יחסי התלות האלה
כדי להשתמש במקום זאת בהגדרות האישיות של lintPublish .
Kotlindependencies { // Executes lint checks from the ":checks" project at build time. lintChecks(project(":checks")) // Compiles lint checks from the ":checks-to-publish" into a // lint.jar file and publishes it to your Android library. lintPublish(project(":checks-to-publish")) } מגניבdependencies { // Executes lint checks from the ':checks' project at build time. lintChecks project(':checks') // Compiles lint checks from the ':checks-to-publish' into a // lint.jar file and publishes it to your Android library. lintPublish project(':checks-to-publish') } |
הגדרת יחסי תלות לווריאנט build ספציפי
כל ההגדרות הקודמות חלות יחסי תלות על כל הווריאציות של ה-build. אם המיקום במקום זאת, ברצונך להצהיר על תלות רק של גרסת ספציפית הוגדר מקור הווריאנט או עבור מקור בדיקה set, צריך להשתמש באותיות רישיות בהגדרה ולהוסיף לו את השם של הווריאנט של ה-build או של קבוצת המקור לבדיקה.
לדוגמה, כדי להוסיף תלות בינארית מרחוק רק בשדה חינם מוצר
טעם באמצעות ההגדרה implementation
, צריך להשתמש כך:
Kotlin
dependencies { freeImplementation("com.google.firebase:firebase-ads:21.5.1") }
מגניב
dependencies { freeImplementation 'com.google.firebase:firebase-ads:21.5.1' }
עם זאת, אם רוצים להוסיף תלות בווריאציה שמשלבת מוצר טעם וסוג build, עליכם לאתחל את שם ההגדרה:
Kotlin
// Initializes a placeholder for the freeDebugImplementation dependency configuration. val freeDebugImplementation by configurations.creating dependencies { freeDebugImplementation(project(":free-support")) }
מגניב
configurations { // Initializes a placeholder for the freeDebugImplementation dependency configuration. freeDebugImplementation {} } dependencies { freeDebugImplementation project(":free-support") }
כדי להוסיף יחסי תלות של implementation
לבדיקות המקומיות ולבדיקות הקבועות
, הוא נראה כך:
Kotlin
dependencies { // Adds a remote binary dependency only for local tests. testImplementation("junit:junit:4.12") // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
מגניב
dependencies { // Adds a remote binary dependency only for local tests. testImplementation 'junit:junit:4.12' // Adds a remote binary dependency only for the instrumented test APK. androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' }
עם זאת, הגדרות מסוימות לא הגיוניות במצב הזה. לדוגמה,
מכיוון שמודולים אחרים לא יכולים להיות תלויים ב-androidTest
, מקבלים את הערך הבא
אזהרה אם משתמשים בהגדרה של androidTestApi
:
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'.
סדר התלות
הסדר שבו מפורטים יחסי התלות מציין את העדיפות של כל אחד מהם: הספרייה הראשונה נמצאת בעדיפות גבוהה יותר מהשנייה, השנייה גבוהה יותר בעדיפות גבוהה יותר מהשלישי, וכן הלאה. הסדר הזה חשוב אם המשאבים מתמזגים, או רכיבי המניפסט ממוזגים אל האפליקציה מהספריות.
לדוגמה, אם הפרויקט שלכם מצהיר על הדברים הבאים:
- תלות ב-
LIB_A
וב-LIB_B
(בסדר הזה) - ו-
LIB_A
תלוי ב-LIB_C
וב-LIB_D
(בסדר הזה) - ו-
LIB_B
תלוי גם ב-LIB_C
לאחר מכן, סדר התלות הקבוע יהיה כך:
LIB_A
LIB_D
LIB_B
LIB_C
כך אפשר להבטיח שגם LIB_A
וגם LIB_B
יוכלו לעקוף
LIB_C
; ו-LIB_D
עדיין נמצא בעדיפות גבוהה יותר מ-
LIB_B
כי LIB_A
(תלוי בה)
יש עדיפות גבוהה יותר מ-LIB_B
.
למידע נוסף על מניפסטים מפרויקטים שונים מקורות/תלות ממוזגים, מיזוג מספר קובצי מניפסט.
מידע על תלות ב-Play Console
במהלך יצירת האפליקציה, AGP כולל מטא-נתונים שמתארים את הספרייה של יחסי התלות המורכבים באפליקציה שלכם. כשמעלים את האפליקציה, אפליקציית Play המסוף בודק את המטא-נתונים האלה כדי לספק התראות על בעיות ידועות בערכות SDK של האפליקציה שלך, ובמקרים מסוימים לספק משוב פרקטי כדי לפתור את הבעיות.
הנתונים נדחסים, מוצפנים באמצעות מפתח החתימה של Google Play ומאוחסנים
חסימת החתימה של אפליקציית הגרסה. מומלץ לשמור את יחסי התלות האלה
כדי לספק חוויית משתמש בטוחה וחיובית. כדי לבטל את ההסכמה, צריך לכלול את
במעקב
dependenciesInfo
בקובץ build.gradle.kts
של המודול.
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}
למידע נוסף על המדיניות שלנו ועל בעיות אפשריות בקשר ליחסי תלות, אפשר לעיין בכתובת בדף התמיכה שלנו באמצעות ערכות SDK של צד שלישי באפליקציה.
תובנות לגבי SDK
ב-Android Studio מוצגות אזהרות לאיתור שגיאות בקוד בקובץ קטלוג הגרסאות ובקובץ Project תיבת דו-שיח מבנה של ערכות SDK ציבוריות Google Play SDK Index במקרים הבאים:
- ערכות ה-SDK מסומנות כמיושנות על ידי המחברים שלהן.
- ערכות ה-SDK מפירות את המדיניות של Play.
האזהרות האלו מהוות סימנים לכך שצריך לעדכן את יחסי התלות האלה, שימוש בגרסאות מיושנות עלול למנוע ממך לפרסם ב-Google Play מסוף בעתיד.
הוספת יחסי תלות של build ללא קטלוגים של גרסאות
אנחנו ממליצים להשתמש בקטלוגים של גרסאות כדי להוסיף ולנהל יחסי תלות, יכול להיות שלא יהיה צורך בהם. דוגמה לקובץ build שלא משתמשים בו קטלוגים של גרסאות:
Kotlin
plugins { id("com.android.application") } android { ... } dependencies { // Dependency on a remote binary implementation("com.example.android:app-magic:12.3") // Dependency on a local library module implementation(project(":mylibrary")) }
מגניב
plugins { id 'com.android.application' } android { ... } dependencies { // Dependency on a remote binary implementation 'com.example.android:app-magic:12.3' // Dependency on a local library module implementation project(':mylibrary') }
קובץ ה-build הזה מצהיר על תלות בגרסה 12.3 של App-magic בספרייה 'com.example.android' קבוצת מרחב שמות. הקובץ הבינארי המרוחק הצהרת תלות היא קיצור של:
Kotlin
implementation(group = "com.example.android", name = "app-magic", version = "12.3")
מגניב
implementation group: 'com.example.android', name: 'app-magic', version: '12.3'
קובץ ה-build גם מצהיר על תלות במודול ספרייה של Android בשם
"mylibrary"; השם הזה חייב להתאים לשם הספרייה שהוגדר ל-include:
ב-
את הקובץ settings.gradle.kts
. כשיוצרים את האפליקציה, מערכת ה-build
מהדרת את מודול הספרייה ואריזת תוכן מכל הסוגים
אפליקציה.
קובץ ה-build גם מצהיר על תלות בפלאגין Android Gradle
(com.application.android
). אם יש לכם כמה מודולים שמשתמשים באותם
אפשר להשתמש רק בגרסה אחת של הפלאגין ב-build classpath
בכל המודולים. במקום לציין את הגרסה בכל אחד מהמודול
צריך לכלול את התלות של הפלאגין בסקריפט של build ברמה הבסיסית
עם הגרסה, ומציינים שלא להחיל אותה. הוספת apply false
התראות
Gradle כדי לציין את גרסת הפלאגין אבל לא להשתמש בה ב-build של הרמה הבסיסית (root).
בדרך כלל הסקריפט של build ברמה הבסיסית ריק, חוץ מהבלוק plugins
הזה.
Kotlin
plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false }
מגניב
plugins { id ‘com.android.application’ version ‘8.3.0-rc02’ apply false }
אם יש לכם פרויקט עם מודול יחיד, אפשר לציין את הגרסה במפורש סקריפט ה-build ברמת המודול ומשאירים את סקריפט ה-build ברמת הפרויקט ריק:
Kotlin
plugins { id("com.android.application") version "8.3.0" }
מגניב
plugins { id 'com.android.application' version '8.3.0-rc02' }