הגדרת המודול הבסיסי

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

שנתחיל?

רוב הפרויקטים של אפליקציות לא מצריכים מאמץ רב כדי לתמוך בקובצי Android App Bundle. הסיבה לכך היא שהמודול שכולל קוד ומשאבים לבסיס האפליקציה APK הוא מודול האפליקציה הרגיל, שמקבלים כברירת מחדל כשמוסיפים יוצרים פרויקט אפליקציה חדש ב-Android Studio. כלומר, המודול שמחיל את הפלאגין application שבהמשך על הקובץ build.gradle מספק את הקוד והמשאבים לפונקציונליות הבסיסית של האפליקציה.

מגניב

// The standard application plugin creates your app's base module.
plugins {
 id 'com.android.application'
}

Kotlin

plugins {
    // The standard application plugin creates your app's base module.
    id("com.android.application")
}

בנוסף לפונקציונליות העיקרית של האפליקציה, המודול הבסיסי מספקת גם רבות מהגדרות ה-build ומרשומות המניפסט ישפיעו על כל פרויקט האפליקציה.

תצורת ה-build של המודול הבסיסי

ברוב הפרויקטים הקיימים של האפליקציות לא צריך לשנות שום דבר בבסיס. תצורת ה-build של המודול. עם זאת, אם אתם שוקלים להוסיף להוספת מודולים לפרויקט האפליקציה שלכם או אם השקתם בעבר את האפליקציה באמצעות כמה חבילות APK, יש כמה היבטים בתצורת ה-build של המודול הבסיסי שכדאי לזכור

קוד גרסה ועדכונים לאפליקציה

בעזרת קובצי Android App Bundle, אין יותר צורך לנהל קודי גרסאות של כמה חבילות APK שמעלים ל-Google Play. במקום זאת, לנהל רק קוד גרסה אחד במודול הבסיסי של האפליקציה, כפי שמוצג בהמשך:

// In your base module build.gradle file
android {
    defaultConfig {
        …
        // You specify your app’s version code only in the base module.
        versionCode 5
        versionName "1.0"
    }
}

אחרי שתעלו את ה-App Bundle, מערכת Google Play תשתמש בקוד הגרסה של המודול הבסיסי כדי להקצות את אותו קוד גרסה לכל חבילות ה-APK שהוא יוצר מהן את החבילה הזו. כלומר, כשמכשיר מוריד ומתקין את האפליקציה, כל לחבילות ה-APK של האפליקציה הזו יש קוד גרסה זהה.

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

שיקולים אחרים

  • חתימת אפליקציה: אם כוללים פרטי חתימה בקובצי ה-build שלכם, צריך לכלול אותו רק בקובץ תצורת ה-build של המודול הבסיסי. מידע נוסף זמין במאמר הבא: מגדירים את Gradle לחתימה על האפליקציה.
  • כיווץ קוד: אם רוצים להפעיל כיווץ קוד בשביל את כל הפרויקט של האפליקציה (כולל המודולים של התכונות שלו), עליכם לבצע כלומר מהקובץ build.gradle של מודול הבסיס. כלומר, אפשר כוללים כללי ProGuard מותאמים אישית במודול של תכונות, אלא המאפיין minifyEnabled בתכונה המערכת מתעלמת מהגדרות ה-build של המודול.
  • המערכת מתעלמת מהבלוק splits: כשיוצרים App Bundle, אפשר להשתמש ב-Gradle מתעלם ממאפיינים בבלוק android.splits. אם רוצים לשלוט באילו סוגי חבילות APK של תצורה נתמכות ב-App Bundle שלך. במקום זאת, צריך להשתמש android.bundle עד להשבית את סוגי ה-APKs של ההגדרות האישיות.
  • ניהול גרסאות של אפליקציות: המודול הבסיסי קובע את קוד הגרסה והגרסה השם כולו של פרויקט האפליקציה. מידע נוסף זמין בקטע על ניהול עדכוני אפליקציות

הפעלה מחדש או השבתה של סוגים של חבילות APK לתצורה

כברירת מחדל, כשיוצרים קובץ App Bundle, יש תמיכה ביצירת הגדרות אישיות חבילות APK לכל קבוצה של משאבי שפה, משאבים לדחיסות מסך ו-ABI של הספריות. משתמשים בבלוק android.bundle במודול הבסיסי בקובץ build.gradle, כמו שמוצג בהמשך, אפשר להשבית את התמיכה בקובץ אחד או יותר סוגים של חבילות APK לתצורה:

מגניב

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

Kotlin

android {
    // When building Android App Bundles, the splits block is ignored.
    // You can remove it, unless you're going to continue to build multiple
    // APKs in parallel with the app bundle
    splits {...}

    // Instead, use the bundle block to control which types of configuration APKs
    // you want your app bundle to support.
    bundle {
        language {
            // This property is set to true by default.
            // You can specify `false` to turn off
            // generating configuration APKs for language resources.
            // These resources are instead packaged with each base and
            // feature APK.
            // Continue reading below to learn about situations when an app
            // might change setting to `false`, otherwise consider leaving
            // the default on for more optimized downloads.
            enableSplit = false
        }
        density {
            // This property is set to true by default.
            enableSplit = true
        }
        abi {
            // This property is set to true by default.
            enableSplit = true
        }
    }
}

טיפול בשינויים בשפה

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

לאפליקציות שמציעות הכלי לבחירת שפה בתוך האפליקציה, באופן דינמי לשנות את שפת האפליקציה, ללא קשר להגדרת השפה ברמת המערכת, צריך לבצע כמה שינויים כדי למנוע קריסות עקב משאבים חסרים. אחד משני הערכים צריך להגדיר את המאפיין android.bundle.language.enableSplit ל-false, או להטמיע הורדות של שפות על פי דרישה באמצעות ספריית Play Core בתור כמתואר במאמר הורדת משאבי שפה נוספים