קטלוגי גרדל של גראדל מאפשרים לנו להוסיף ולשמור על תלבושות בדרך קלה ומתקדמת. היישומים גדלים, וניהול פרויקטים עם מספר קבוצות פיתוח מגדיל את זמן הקובץ.
פתרון אפשרי אחד לטפל בנושא זה כולל חלוקת הפרויקט למודולים מרובים. הקמפולציה של המודולים הללו במקביל והקמפולציה המיוחדת של החלקים המשתנים מקטינה את סך הזמן של הקמפולציה. עם זאת, בעיה צצה: איך נוכל לשתף תלבושות של ספריות משותפות וגרסאותיהן בצורה יעילה ובמקביל להימנע משגיאות קובץ והצורך לבדוק אוטומטית את קבצי Gradle בכל מודול כדי למנוע בעיות סינכרוניות?
קטלוגי גרדל של גראדל עוזרים לנו למקם את כל התלבושות בקובץ אחד עם סימון בטיחות שנוכל לקרוא מהמודולים שלנו.
יצירת קובץ גרסאות
ראשית, עלינו ליצור את הקובץ שלנו בתיקיית Gradle. לפי המוסכמה, אנו משתמשים בשם libs.version.toml
המומלץ במדריכים לפיתוח אנדרואיד.
קובץ זה יכיל שלושה סעיפים:
[versions]
[libraries]
[plugins]
- גרסאות. זה מגדיר את גרסאות התלבושות והתוספות שלך שמשתמשים בשני הבלוקים האחרים
- ספריות. מכיל את התלבושות.
- תוספות. מכיל את התוספות.
בואו נגדיר כדוגמה את הגרסה והתלבושות של ספריית ההתקפה התלתית של Koin.
[versions]
koin = "3.4.0"
[libraries]
koin-core = { group = "io.insert-koin", name = "koin-core", version.ref = "koin" }
koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = "koin" }
koin-androidx-compose = { group = "io.insert-koin", name = "koin-androidx-compose", version.ref = "koin" }
koin-androidx-workmanager = { group = "io.insert-koin", name = "koin-androidx-workmanager", version.ref = "koin" }
koin-test = { group = "io.insert-koin", name = "koin-test", version.ref = "koin" }
koin-test-junit4 = { group = "io.insert-koin", name = "koin-test-junit4", version.ref = "koin" }
לאחר מכן, כדי לקרוא את התלבושת מכל מודול, נצטרך רק לעשות את הפעולה הבאה:
Dependencies {
implementation(libs.koin.core)
implementation(libs.koin.android)
}
יצירת התוספות שלך, וכל המודולים שלך תמיד יהיו סנכרנים
כשכבר העברנו את התלמידים שלנו, אנו רואים בעיה. כל המודולים שלנו שצריכים את Koin יש לחזור על אותם שורות. כאן, אנו יכולים לראות דוגמא ברורה של DRY (אל תחזור על עצמך), ואנו נוצר מרכיב Gradle כדי לחסוך מאיתנו לחזור שוב ושוב על הכללת התלמידים הללו.
בקובץ build.gradle.kts
שלנו, נוכל לרשום את המרכיבים של Gradle.
gradlePlugin {
plugins {
register("koin") {
id = "example.android.koin"
implementationClass = "AndroidKoinConventionPlugin"
}
}
}
לאחר מכן, נוצר התוסף שלנו, ונוסיף את התלמידים של התוסף הזה עם GVC.
class AndroidKoinConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
dependencies {
"implementation"(libs.findLibrary("koin.core").get())
"implementation"(libs.findLibrary("koin.android").get())
"implementation"(libs.findLibrary("koin.androidx.compose").get())
"implementation"(libs.findLibrary("koin.androidx.workmanager").get())
"testImplementation"(libs.findLibrary("koin.test").get())
"testImplementation"(libs.findLibrary("koin.test.junit4").get())
}
}
}
}
הדבר היחיד שנשאר הוא לקרוא במודולים שלנו לתוסף Koin, ואם יום אחד נצטרך לשדרג את הגרסה, נוכל רק ללכת לקובץ ההגדרות שלנו, וכולם יתעדכנו כשנסנכרן את Gradle. לדוגמא, קובץ המודול של הנתונים עם כל התלמידים שלו
plugins {
id("example.android.library")
id("example.android.koin")
}
android {
namespace = "com.example.core.data"
}
dependencies {
implementation(libs.kotlinx.coroutines.android)
}
עם כל זה, אנו יכולים ליצור תוספים שמאגדים תלמידים, לדוגמא:
- ספרייה
- Compose
- טביעות
- תכונה
- DI
- מסד נתונים
- בדיקה
השקפות
Gradle קטלוגי גרסאות עדיין נמצאים בפיתוח מלא, ומומלץ לעקוב אחר הבאגים והמוגבלויות הידועים שאותם מפרסמת אנדרואיד. הדוגמאות במאמר זה מראות את היתרונות של Gradle קטלוגי גרסאות ואת האופן שבו הם יכולים להקל על חיינו. אם אתם מחפשים יישום תפקודי שלו, תוכלו למצוא אותו עכשיו בגיטהאב עבור אנדרואיד.
Source:
https://dzone.com/articles/gradle-version-catalogs-on-android