בעבר, הדרך היחידה לשלב את 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 יעיל ואמין יותר.
- שילוב משופר של סביבת הפיתוח המשולבת (IDE): הפלאגין מספק שילוב משופר עם 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 של קטלוג הגרסאות ומוסיפים את הקטע הבא לקטע
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.gradle.kts
(Kotlin) אוbuild.gradle
(Groovy) ברמה הבסיסית של מודול הספרייה של KMP.מחילים את הפלאגין בחלק העליון של הקובץ, בתוך הבלוק
plugins
: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 }
מגדירים את הבלוק 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.