העברת האפליקציה ללא התקנה לתמיכה בקובצי Android App Bundle

אזהרה: התכונה 'Google Play ללא התקנה' לא תהיה זמינה יותר. החל מדצמבר 2025, לא תהיה אפשרות לפרסם אפליקציות ללא התקנה דרך Google Play, וכל ממשקי Instant API של Google Play Services יפסיקו לפעול. המשתמשים לא יקבלו יותר אפליקציות מיידיות מ-Play באמצעות מנגנון כלשהו.

אנחנו מבצעים את השינוי הזה על סמך משוב שקיבלנו ממפתחים וההשקעות המתמשכות שלנו בשיפור הסביבה העסקית מאז השקת Google Play ללא התקנה.

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

אם אתם עדיין משתמשים בפלאגין Feature Android Gradle שהוצא משימוש (com.android.feature) עבור מודולים של אפליקציה ללא התקנה ל-Android, אתם צריכים לעבור לשימוש בפלאגין של אפליקציית הבסיס (com.android.application) ובפלאגין של התכונה הדינמית (com.android.dynamic-feature).

בפלאגין Android Gradle מגרסה 3.3.0 ואילך, הפלאגין של אפליקציית הבסיס כולל תמיכה בחוויות אינסטנט. כלומר, אם מודול האפליקציה הבסיסי עומד בדרישות של חוויה מיידית, אתם נהנים מהיתרון הזה באופן אוטומטי. לאחר מכן תוכלו לכלול תכונות נוספות שהמשתמשים יוכלו להוריד לפי דרישה כחוויות מיידיות באמצעות התוסף Dynamic Feature. ההגדרה הזו מקלה על התמיכה בחוויית שימוש באפליקציה מותקנת ובאפליקציה ללא התקנה מתוך פרויקט יחיד, ומאפשרת לכם ליהנות מפרסום באמצעות Android App Bundles.

בטבלה הבאה מפורט אילו תוספים יועברו:

תיאור המודול פלאגין ישן הפלאגין הנוכחי
המודול שכולל את הקוד הבסיסי, המשאבים והפונקציונליות של חוויית השימוש באפליקציה המותקנת או באפליקציה המיידית. com.android.feature (עם baseFeature = true) com.android.application

הערה: המודול הזה כולל את כל המניפסט ופרטי החתימה שנדרשים כדי ליצור את האפליקציה כקובץ Android App Bundle או כ-APK.

תכונות נוספות ומודולריות שמשתמשים יכולים להוריד לפי דרישה com.android.feature com.android.dynamic-feature (עם dist:instant="true" ו-dist:onDemand="false" במניפסט של המודול)
קוד ומשאבים של תכונה שזמינים רק בגרסה המותקנת של האפליקציה. com.android.application com.android.dynamic-feature (עם dist:instant="false" ו-dist:onDemand="false" במניפסט של המודול)

בדף הזה מוסבר איך להעביר את פרויקט האפליקציה הקיימת שלכם שמופעלת ללא התקנה, כדי ליצור קובץ Android App Bundle שמופעל ללא התקנה. בנוסף, במאמר מוסבר איך ליצור, לבדוק ולפרסם קובץ Android App Bundle שמופעל ללא התקנה.

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

הסבר על השינויים

כשמעבירים את הפרויקט לשימוש בפלאגין Dynamic Feature,‏ Android App Bundle מספק דרך חדשה לבנייה ולפרסום של האפליקציה, שמפשטת באופן משמעותי את ההפצה של חבילות APK שעברו אופטימיזציה למשתמשים.

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

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

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

כדי להעביר את פרויקט האפליקציה ללא התקנה הקיים שלכם ולעבור למודל הפצה אופטימלי יותר של Android App Bundle, פועלים לפי השלבים שמתוארים בקטעים הבאים.

המרת מודול תכונות בסיס למודול אפליקציה

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

  1. מוחקים את השורה baseFeature true.
  2. מסירים את כל התלויות שמשתמשות בהגדרות התלויות feature או application.

    מגניב

    dependencies {
        ...
        // delete any lines that look like
        // feature project(":foo")
        // feature project(":bar")
        // application project(":app")
    }

    Kotlin

    dependencies {
        ...
        // delete any lines that look like
        // feature(project(":foo"))
        // feature(project(":bar"))
        // application(project(":app"))
    }
  3. מעבירים את applicationId, יחד עם כל ההגדרות האחרות של סקריפט ה-build שאמורות להיות במודול האפליקציה הבסיסי, מהמודול הנוכחי com.android.application למודול com.android.feature. בהמשך מוצגות כמה דוגמאות. בשלב הזה, בהתאם להגדרה הספציפית שלכם, יכול להיות שיהיה קל יותר להעתיק ולהדביק את הבלוק build.gradle מקובץ build.gradle של מודול האפליקציה הקודם לקובץ build.gradle של מודול האפליקציה החדש.android עם זאת, צריך לנקוט משנה זהירות כשעושים זאת.

    מגניב

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile(
                  'proguard-android-optimize.txt'),
                  'proguard-rules.pro'
            }
        }
    }

    Kotlin

    android {
        ...
        defaultConfig {
            // You need to move the application ID from the app module
            // to your feature module.
            applicationId = "com.example.myapp"
            ...
        }
        // Some additional build configurations you might want to
        // copy from your current ‘app’ module may include ProGuard
        // rules and code shrinking settings.
        buildTypes {
            getByName("release") {
                minifyEnabled = true
                proguardFiles(
                    getDefaultProguardFile("proguard-android-optimize.txt"),
                    "proguard-rules.pro"
                )
            }
        }
    }
  4. מסמנים את מודול התכונות כמודול שאפשר להפעיל באופן מיידי על ידי הוספה של תגי הפצת החבילה המתאימים למניפסט, כמו שמוצג בהמשך.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" />
        ...
    </manifest>
    
  5. ממירים את מודול התכונות למודול הבסיס של האפליקציה על ידי שינוי סוג הפלאגין שלו ל-com.android.application:

    מגניב

    // Replace  "plugins { id 'com.android.feature' }"
    // with the following
    plugins {
      id 'com.android.application'
    }

    Kotlin

    // Replace  "plugins { id("com.android.feature") }"
    // with the following
    plugins {
        id("com.android.application")
    }

המרת מודול האפליקציה הישן למודול תכונות שמותקן בזמן ההתקנה

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

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

כדי ליצור מודול תכונות, צריך לשנות את סוג הפלאגין מ-com.android.application ל-com.android.dynamic-feature, ולבצע עוד כמה שינויים ב-build.gradle, כמו שמתואר בהמשך:

  1. משנים את סוג הפלאגין מ-com.android.application ל-com.android.dynamic-feature.

    מגניב

    // Replace "plugins { id 'com.android.feature' }"
    // with the following:
    plugins {
      id 'com.android.dynamic-feature'
    }

    Kotlin

    // Replace "plugins { id("com.android.application") }"
    // with the following:
    plugins {
        id("com.android.dynamic-feature")
    }
  2. כמו שמתואר בקטע הקודם, צריך לוודא שהעברתם את הגדרות ה-build שנדרשות על ידי התוסף com.android.application למודול האפליקציה הבסיסי, כמו כללי applicationId או proguardFiles.

  3. משנים את שם המודול לשם כמו installed_feature באופן הבא:

    1. פותחים את החלונית Project (פרויקט) על ידי בחירה באפשרות View > Tool Windows > Project (תצוגה > חלונות כלים > פרויקט) בסרגל התפריטים.
    2. לוחצים לחיצה ימנית על מודול התכונות ובוחרים באפשרות Refactor > Rename (שינוי שם).
    3. בתיבת הדו-שיח שמופיעה, בוחרים באפשרות Rename module ולוחצים על OK.
    4. מזינים את השם החדש של המודול ולוחצים על אישור.
  4. בדומה לשלב 3, משנים את השם של מודול האפליקציה החדש שיצרתם בקטע הקודם לשם כמו app.

  5. מוסיפים תלות בהטמעה במודול app בקובץ build.gradle של מודול התכונה, כמו בדוגמה שלמטה.

    מגניב

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation project(":app")
    }

    Kotlin

    dependencies {
        ...
        // In the feature module, add an implementation dependency
        // on the base app module.
        implementation(project(":app"))
    }
  6. מוסיפים את התכונה לקובץ build.gradle של מודול האפליקציה החדש.

    מגניב

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures = [":installed_feature"]
    }

    Kotlin

    android {
        ...
        // In the base app module, specify each feature module.
        dynamicFeatures.addAll(listOf(":installed_feature"))
    }
  7. במניפסט של מודול התכונות, מסמנים את מודול התכונות כמודול שאפשר להתקין על ידי הוספת תגי הפצה מתאימים של חבילות למניפסט.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="false" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    

המרת מודולים אחרים של תכונות למודולים של תכונות שמופעלות ללא התקנה

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

לכל מודול תכונות שנותר בפרויקט, פועלים לפי השלבים הבאים כדי להמיר אותו לתכונה שמופעלת באופן מיידי:

  1. משנים את סוג הפלאגין בקובץ build.gradle ל-com.android.dynamic-feature, כמו שמוצג בהמשך:

    מגניב

    // Replace 'com.android.feature' with 'com.android.dynamic-feature'
    plugins {
      id 'com.android.dynamic-feature'
    }

    Kotlin

    // Replace "com.android.feature" with "com.android.dynamic-feature"
    plugins {
        id("com.android.dynamic-feature")
    }
  2. כדי לסמן כל מודול תכונות כמודול שמופעל באופן מיידי, מוסיפים את הקוד הבא למניפסט.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
        <dist:module dist:instant="true" dist:onDemand="false"
                dist:title="@string/title_dynamic_feature">
            <dist:fusing dist:include="true" />
        </dist:module>
        ...
    </manifest>
    
  3. מוסיפים את מודול התכונות לקובץ build.gradle של מודול האפליקציה החדש, במקום שבו הוספתם את installed_feature לרשימת מודולי התכונות.

    מגניב

    android {
       ...
       dynamicFeatures = [":installed_feature", ":feature_1", ":feature_2"]
       // or whichever name exists for the instant enabled feature module
    }

    Kotlin

    android {
       ...
       dynamicFeatures.addAll(listOf(":installed_feature", ":feature_1", ":feature_2"))
       // or whichever name exists for the instant enabled feature module
    }

איך יוצרים, בודקים ומפרסמים קובץ Android App Bundle שמופעל ללא התקנה

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

כדי להתחיל ליצור ולבדוק את קובץ ה-App Bundle שמופעל ללא התקנה, עוברים אל יצירת קובץ ה-App Bundle.