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

בדף הזה מתוארות הגדרות שימושיות של אפליקציות בקובץ 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"
    }
    ...
}

מגניב

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"
    ...
}

מגניב

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

כשיוצרים את חבילת האפליקציה הסופית (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"
    ...
}

מגניב

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

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