בעבר, הדרך היחידה לשלב Android בפרויקט KMP הייתה להשתמש בפלאגין ה-Gradle הרגיל של ספריית Android: com.android.library
. עם זאת, הגישה הזו הוצאה משימוש לטובת הפלאגין הייעודי com.android.kotlin.multiplatform.library
, שנקרא גם פלאגין Android-KMP. במדריך הזה נסביר איך להעביר את האתר ל-Plugin החדש.
תכונות והבדלים עיקריים
הפלאגין Android-KMP (com.android.kotlin.multiplatform.library
) מותאם במיוחד לפרויקטים של KMP, והוא שונה מהפלאגין המסורתי com.android.library
בכמה היבטים מרכזיים:
- ארכיטקטורה של וריאנט יחיד: הפלאגין פועל עם וריאנט יחיד, שמפשט את תהליך ה-build על ידי הסרת התמיכה בטעמי המוצר ובסוגי ה-build הנפוצים בפרויקטים רגילים של ספריות Android. כך אפשר לפשט את ההגדרה ולשפר את ביצועי ה-build בספריות KMP ל-Android.
- אופטימיזציה ל-KMP: הפלאגין מיועד במיוחד לספריות Kotlin למספר פלטפורמות, עם דגש על קוד Kotlin משותף ועל יכולת פעולה הדדית. כתוצאה מכך, אין תמיכה ב-builds מקומיים ספציפיים ל-Android, ב-AIDL (Android Interface Definition Language) וב-RenderScript, שאינם רלוונטיים בדרך כלל בהקשר של קוד משותף ב-KMP.
- הבדיקות מושבתות כברירת מחדל: כדי לשפר עוד יותר את מהירות ה-build בסביבה עם תמיכה בפלטפורמות מרובות, הבדיקות מושבתות כברירת מחדל. אם צריך לבצע בדיקות בפרויקט, אפשר להפעיל אותן במפורש. הכלל הזה חל גם על בדיקות במארח (בדיקות יחידה) וגם על בדיקות במכשיר (בדיקות של מכשירי מדידה).
- אין תוסף Android ברמה העליונה: הפלאגין לא יוצר תוסף
android
ברמה העליונה בקובצי ה-build של Gradle. ההגדרות מטופלות באמצעות בלוקandroidLibrary
ב-DSL של Kotlin לפלטפורמות מרובות, תוך שמירה על מבנה עקבי של פרויקט KMP. - הפעלת הידור Java: הידור Java לא מופעל כברירת מחדל. אם ספריית ה-KMP צריכה לקמפל קוד מבוסס-Java, צריך להביע הסכמה מפורשת באמצעות ה-API של
withJava()
בתוך בלוק התצורהandroidLibrary
בבלוקkotlin
. כך אפשר לשלוט בצורה טובה יותר בתהליך הידור, וזה יכול לשפר את זמני ה-build כשלא נדרש הידור של קוד מבוסס-Java.
היתרונות של ההעברה
הפלאגין Android-KMP מספק את היתרונות הבאים לפרויקטים של KMP:
- שיפור הביצועים והיציבות של ה-build: הפלאגין Android-KMP תוכנן כדי לשפר את מהירות ה-build ואת היציבות בפרויקטים של KMP. הארכיטקטורה הפשוטה והמיקוד בתהליכי העבודה של KMP תורמים לתהליך build יעיל ואמין יותר.
- שילוב משופר של סביבת הפיתוח המשולבת: הפלאגין מספק שילוב משופר עם Android Studio ועם סביבות פיתוח משולבות אחרות של Kotlin. כך אפשר לשפר את השלמת הקוד, הניווט, ניפוי הבאגים וחוויית הפיתוח הכוללת כשעובדים עם ספריות KMP ל-Android.
- הגדרות פשוטות יותר של פרויקטים: הפלאגין Android-KMP מסיר את המורכבות הספציפית ל-Android, כמו וריאנטים, ומפשט את ההגדרות של פרויקטים ב-KMP. התוצאה היא קובצי build נקיים יותר וקלים יותר לתחזוקה, וזמן למידה קצר יותר למפתחים חדשים בפיתוח KMP ל-Android.
בעבר, כששילבו את Android בפרויקט KMP באמצעות הפלאגין
com.android.library
, האינטראקציה בין הפלאגין של Android Gradle לבין הפלאגין של Kotlin Gradle במבנה של פלטפורמות מרובות הביאה לפעמים לשמות מטעים של קבוצות מקורות. לדוגמה, קבוצת המקור שמוקדשת להגדרת בדיקות של Android עם מכשירי מדידה נקראהandroidAndroidTest
. מוסכמת השמות הזו הייתה פחות אינטואיטיבית למפתחים שמכירים את המבנים הרגילים של פרויקטים ב-KMP. - הפתרון הרשמי והמומלץ: הפלאגין
com.android.kotlin.multiplatform.library
הוא הפתרון הרשמי להחלפה של השיטה הקודמת להוספת יעדי Android לספריות KMP באמצעות הפלאגיןcom.android.library
. לא תהיה יותר תמיכה של JetBrains בשימוש ב-com.android.library
ל-KMP, ולא תהיה אפשרות ליהנות מעדכונים ושיפורים עתידיים.
החלת הפלאגין Android-KMP על פרויקט
יש שתי דרכים עיקריות להחיל את הפלאגין Android-KMP על הפרויקט:
- במודולים קיימים של ספריות KMP, עורכים את קובצי Gradle באופן ידני.
- במודולים חדשים של ספריית KMP, יוצרים את המודול החדש ישירות מממשק המשתמש של Android Studio.
החלת הפלאגין על מודול קיים
כדי להחיל את הפלאגין Android-KMP על מודול קיים של ספריית KMP, פועלים לפי השלבים הבאים:
הצהרה על יישומי פלאגין בקטלוג הגרסאות פותחים את קובץ ה-TOML של קטלוג הגרסאות (בדרך כלל
gradle/libs.versions.toml
) ומוסיפים את הגדרות הפלאגין לקטע[plugins]
. קטע:[plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "KOTLIN_PLUGIN_VERSION" } android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "ANDROID_KMP_PLUGIN_VERSION" }
מחליפים את KOTLIN_PLUGIN_VERSION ו-ANDROID_KMP_PLUGIN_VERSION בגרסאות שבהן אתם משתמשים.
החלת הצהרות על הפלאגין בקובץ ה-build ברמה הבסיסית (root). פותחים את הקובץ
build.gradle.kts
(Kotlin) אוbuild.gradle
(Groovy) שנמצא בספריית השורש של הפרויקט. מוסיפים את כתובות האימייל החלופיות של הפלאגין לבלוקplugins
באמצעותapply false
. כך כינויי הפלאגין יהיו זמינים לכל הפרויקטים המשניים, בלי להחיל את הלוגיקה של הפלאגין על פרויקט הבסיס עצמו.Kotlin
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Groovy
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
החלת הפלאגין בקובץ ה-build של מודול הספרייה של KMP פותחים את הקובץ
build.gradle.kts
(Kotlin) אוbuild.gradle
(Groovy) במודול הספרייה של KMP. מחילים את הפלאגין בחלק העליון של הקובץ, בתוך הבלוקplugins
:Kotlin
plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Groovy
plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
הגדרת יעד KMP ל-Android מגדירים את הבלוק Kotlin Multiplatform (
kotlin
) כדי להגדיר את היעד ל-Android. בתוך הבלוקkotlin
, מציינים את היעד ל-Android באמצעותandroidLibrary
:Kotlin
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.configure { jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } } sourceSets { androidMain { dependencies { // Add Android-specific dependencies here } } getByName("androidHostTest") { dependencies { } } getByName("androidDeviceTest") { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Groovy
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.options.jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } sourceSets { androidMain { dependencies { } } androidHostTest { dependencies { } } androidDeviceTest { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
מחילים את השינויים. אחרי שמחילים את הפלאגין ומגדירים את הבלוק
kotlin
, מסנכרנים את פרויקט Gradle כדי להחיל את השינויים.
יצירת מודול חדש באמצעות הפלאגין
אפשר גם ליצור מודול חדש של ספריית Kotlin Multiplatform ישירות ב-Android Studio. הפעולה הזו מחילה את הפלאגינים הנדרשים באופן אוטומטי, כולל הפלאגין Android-KMP. במאמר הוספת Kotlin Multiplatform לפרויקט קיים מוסבר איך יוצרים מודול חדש של ספריית KMP באמצעות Android Studio.
מידע נוסף על הסביבה הכוללת לפלטפורמות מרובות והגדרות מתקדמות יותר זמין במסמכי העזרה הרשמיים של Kotlin Multiplatform.