הגדרת מודול האפליקציה

בדף הזה מתוארות הגדרות שימושיות של אפליקציות בקובץ build.gradle.kts ברמת המודול. בנוסף למידע כללי על המאפיינים החשובים שמוגדרים בקובץ build.gradle.kts, מוסבר בהמשך איך:

  • שינוי מזהה האפליקציה בהגדרות build שונות.
  • שינוי בטוח של מרחב השמות ללא קשר למזהה האפליקציה.

הגדרת מזהה האפליקציה

לכל אפליקציה ל-Android יש מזהה ייחודי שנראה כמו שם חבילה של Java או Kotlin, למשל com.example.myapp. המזהה הזה מזהה באופן ייחודי את האפליקציה במכשיר ובחנות Google Play.

מזהה האפליקציה מוגדר על ידי המאפיין applicationId בקובץ build.gradle.kts של המודול, כפי שמוצג כאן. מעדכנים את הערך של applicationId על ידי החלפת com.example.myapp במזהה האפליקציה:

Kotlin

android {
    defaultConfig {
        applicationId = "com.example.myapp"
        minSdk = 15
        targetSdk = 24
        versionCode = 1
        versionName = "1.0"
    }
    ...
}

Groovy

android {
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    ...
}

מזהה האפליקציה נראה כמו שם חבילת Kotlin או Java רגיל, אבל כללי השמות של מזהה האפליקציה מחמירים יותר:

  • הוא חייב לכלול לפחות שני קטעים (נקודה אחת או יותר).
  • כל מקטע חייב להתחיל באות.
  • כל התווים חייבים להיות אלפאנומריים או קו תחתון [a-zA-Z0-9_].

כשיוצרים פרויקט חדש ב-Android Studio, שם החבילה שבחרתם במהלך ההגדרה מוקצה באופן אוטומטי ל-applicationId. מעכשיו והלאה תוכלו להחליף את המצב של שני המאפיינים בנפרד, אבל לא מומלץ לעשות זאת.

מומלץ לבצע את הפעולות הבאות כשמגדירים את מזהה האפליקציה:

  • מזהה האפליקציה צריך להיות זהה למרחב השמות. ההבדל בין שני המאפיינים יכול להיות קצת מבלבול, אבל אם תשתמשו באותו שם בשני המקרים, לא תצטרכו לדאוג.
  • אל תשנו את מזהה האפליקציה אחרי פרסום האפליקציה. אם תשנו אותו, חנות Google Play תתייחס להעלאה הבאה כאל אפליקציה חדשה.
  • מגדירים באופן מפורש את מזהה האפליקציה. אם מזהה האפליקציה לא מוגדר באופן מפורש באמצעות המאפיין applicationId, הוא יקבל באופן אוטומטי את אותו ערך כמו שמרחב השמות. כלומר, שינוי מרחב השמות משנה את מזהה האפליקציה, וזה בדרך כלל לא מה שרוצים.

שינוי מזהה האפליקציה לצורך בדיקה

כברירת מחדל, כלי ה-build מחילים מזהה אפליקציה על קובץ ה-APK של בדיקת המדידה באמצעות מזהה האפליקציה של גרסת ה-build הנתונה, עם הסיומת .test. לדוגמה, לקובץ APK לבדיקה של וריאנט ה-build com.example.myapp.free יש את מזהה האפליקציה com.example.myapp.free.test.

לא צריך לעשות זאת, אבל אפשר לשנות את מזהה האפליקציה על ידי הגדרת המאפיין testApplicationId בבלוק defaultConfig או ב-productFlavor.

הגדרת מרחב השמות

לכל מודול ב-Android יש מרחב שמות, שמשמשים כשם החבילה ב-Kotlin או ב-Java של הכיתות R ו-BuildConfig שנוצרו.

מרחב השמות מוגדר על ידי המאפיין namespace בקובץ build.gradle.kts של המודול, כפי שמוצג בקטע הקוד הבא. בשלב הראשון, הערך של namespace מוגדר לשם החבילה שבחרתם בזמן יצירת הפרויקט.

Kotlin

android {
    namespace = "com.example.myapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    ...
}

במהלך ה-build של האפליקציה לחבילת האפליקציה הסופית (APK), כלי ה-build של Android משתמשים במרחב השמות כמרחב השמות של הכיתה R שנוצרה באפליקציה, שמשמשת לגישה למשאבי האפליקציה. לדוגמה, בקובץ ה-build הקודם, הכיתה R נוצרת ב-com.example.myapp.R.

השם שהגדרתם למאפיין namespace בקובץ build.gradle.kts צריך תמיד להתאים לשם החבילה הבסיסית של הפרויקט, שבה שומרים את הפעילויות ואת קוד האפליקציה האחר. אפשר לכלול בחבילת המשנה הזו חבילות משנה אחרות, אבל הקבצים האלה חייבים לייבא את הכיתה R באמצעות מרחב השמות מנכס namespace.

כדי לפשט את תהליך העבודה, מומלץ לשמור על זהות בין מרחב השמות למזהה האפליקציה, כפי שהם מוגדרים כברירת מחדל.

שינוי מרחב השמות

ברוב המקרים, כדאי להשאיר את מרחבי השמות ומזהי האפליקציות ללא שינוי, כפי שהם מוגדרים כברירת מחדל. עם זאת, יכול להיות שתצטרכו לשנות את מרחב השמות בשלב מסוים אם תערכו ארגון מחדש של הקוד או כדי למנוע התנגשויות במרחב השמות.

במקרים כאלה, משנים את מרחב השמות על ידי עדכון המאפיין namespace בקובץ build.gradle.kts של המודול, ללא קשר למזהה האפליקציה. לפני כן, חשוב לוודא שמזהה האפליקציה מוגדר באופן מפורש, כדי ששינוי מרחב השמות לא ישנה גם את מזהה האפליקציה. למידע נוסף על האופן שבו מרחב השמות יכול להשפיע על מזהה האפליקציה, ראו הגדרת מזהה האפליקציה.

אם יש שמות שונים ל-namespace ול-applicationId של Gradle, כלי ה-build מעתיקים את מזהה האפליקציה לקובץ המניפסט הסופי של האפליקציה בסוף תהליך ה-build. לכן, אם בודקים את הקובץ AndroidManifest.xml אחרי build, המאפיין package מוגדר למזהה האפליקציה. מאפיין package של המניפסט הממוזג הוא המקום שבו חנות Google Play ופלטפורמת Android מחפשות בפועל את האפליקציה שלכם.

שינוי מרחב השמות לצורך בדיקה

מרחב השמות שמוגדר כברירת מחדל למערכי המקורות androidTest ו-test הוא מרחב השמות הראשי, עם הסיומת .test בסוף. לדוגמה, אם הערך של המאפיין namespace בקובץ build.gradle הוא com.example.myapp, מרחב השמות לבדיקה מוגדר כברירת מחדל ל-com.example.myapp.test. כדי לשנות את מרחב השמות לצורך בדיקה, משתמשים במאפיין testNamespace, כפי שמתואר בקטע הקוד הבא:

Kotlin

android {
    namespace = "com.example.myapp"
    testNamespace = "com.example.mytestapp"
    ...
}

Groovy

android {
    namespace "com.example.myapp"
    testNamespace "com.example.mytestapp"
    ...
}

זהירות: אל תגדירו ל-testNamespace ול-namespace את אותו ערך, אחרת יהיו התנגשויות במרחב השמות.

מידע נוסף על בדיקות זמין במאמר בדיקת אפליקציות ב-Android.