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

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

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

הטבלה הבאה מתארת בצורה טובה יותר לאילו יישומי פלאגין אתם רוצים לעבור:

תיאור המודול פלאגין ישן הפלאגין הנוכחי
המודול שכולל את הקוד הבסיסי, המשאבים והפונקציונליות לחוויה המותקנת או של האפליקציה ללא התקנה. 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 שמופעל ללא התקנה.

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

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

כשמעבירים את הפרויקט לפלאגין של תכונה דינמית, קובצי 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, אולי יהיה קל יותר להעתיק ולהדביק את android בלוק של build.gradle ממודול האפליקציה הקודם לאפליקציה החדשה את קובץ build.gradle של המודול. עם זאת, צריך לנהוג בזהירות בעת ביצוע אז.

    מגניב

    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. משנים את שם המודול לשם כמו "Install_feature" ככה:

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

  5. הוספת תלות בהטמעה במודול 'אפליקציה' בתכונה 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
    }
    

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

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

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