نقل بيانات تطبيقك الفوري للتوافق مع تنسيق مجموعة حزمات تطبيق Android

تحذير: لن تكون "تطبيقات Google Play الفورية" متاحة بعد الآن. اعتبارًا من ديسمبر 2025، لن يكون بإمكانك نشر التطبيقات الفورية من خلال Google Play، كما أنّ جميع واجهات برمجة التطبيقات الفورية في "خدمات Google Play" ستتوقف عن العمل. لن يعرض Play "التطبيقات الفورية" للمستخدمين بعد الآن باستخدام أي آلية.

نُجري هذا التغيير استنادًا إلى ملاحظات المطوّرين واستثماراتنا المستمرة لتحسين المنظومة المتكاملة منذ طرح ميزة "تطبيقات Google Play الفورية".

لمواصلة تحسين معدّل اكتساب المستخدمين، ننصح المطوّرين بتوجيه المستخدمين إلى تطبيقهم أو لعبتهم العادية باستخدام الروابط لصفحات معيّنة لإعادة توجيههم إلى مسارات أو ميزات محدّدة عند الحاجة.

إذا كنت لا تزال تستخدم المكوّن الإضافي لنظام Gradle المتوافق مع Android الخاص بالميزات المتوقّف نهائيًا (com.android.feature) لوحدات التطبيق الفوري على Android، عليك نقل البيانات لاستخدام المكوّن الإضافي للتطبيق الأساسي (com.android.application) والمكوّن الإضافي للميزات الديناميكية (com.android.dynamic-feature).

في الإصدار 3.3.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، يتضمّن المكوّن الإضافي للتطبيق الأساسي إمكانية توفير تجارب فورية. أي أنّه إذا كانت وحدة تطبيقك الأساسية تستوفي متطلبات توفير تجربة فورية، ستستفيد من هذه الميزة تلقائيًا. يمكنك بعد ذلك تضمين ميزات إضافية يمكن للمستخدمين تنزيلها عند الطلب كتجارب فورية باستخدام مكوّن Dynamic Feature الإضافي. يسهّل هذا الإعداد توفير تجربة لكل من التطبيق المثبَّت والتطبيق الفوري من مشروع واحد، كما يتيح لك الاستفادة من النشر باستخدام حِزم تطبيقات Android.

يوضّح الجدول التالي بشكل أفضل المكوّنات الإضافية التي سيتم نقلها:

وصف الوحدة المكوّن الإضافي القديم المكوّن الإضافي الحالي
الوحدة التي تتضمّن الرمز الأساسي والموارد والوظائف الخاصة بتجربة التطبيق المثبَّت أو الفوري. com.android.feature (باستخدام baseFeature = true) com.android.application

ملاحظة: تتضمّن هذه الوحدة جميع المعلومات المطلوبة لإنشاء تطبيقك وتعبئته كحزمة تطبيق Android أو ملف 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 تم تفعيل ميزة التطبيقات الفورية فيها. وتوضّح أيضًا كيفية إنشاء حزمة Android App Bundle تمّ تفعيل ميزة التطبيقات الفورية فيها واختبارها ونشرها.

إذا كنت بصدد إنشاء تجارب فورية جديدة لتطبيقك، ننصحك بدلاً من ذلك بقراءة مقالة إنشاء وحدة ميزات مفعَّلة للتطبيقات الفورية.

فهم التغييرات

عند نقل مشروعك لاستخدام مكوّن Dynamic Feature الإضافي بدلاً من ذلك، ستوفّر مجموعات حزمات تطبيق Android طريقة جديدة لإنشاء تطبيقك ونشره، ما يسهّل بشكل كبير توزيع حِزم APK المحسَّنة على المستخدمين.

تُبسّط حِزم التطبيقات عملية التوزيع من خلال تجميع كل الرموز البرمجية والموارد المجمَّعة لتطبيقك بغرض تحميلها، ولكنّها تؤجّل عملية إنشاء حِزم APK وتوقيعها إلى Google Play. يستخدم نموذج عرض التطبيقات الجديد في Google Play حِزمة تطبيقك لإنشاء حِزم APK محسَّنة وعرضها بما يتوافق مع إعدادات جهاز كل مستخدم، وبالتالي لا يضطر المستخدم إلى تنزيل سوى الرموز والموارد التي يحتاج إليها لتشغيل تطبيقك. ولن تحتاج بعد الآن إلى إنشاء حِزم APK متعددة وتوقيعها وإدارتها لتتوافق مع الأجهزة المختلفة، وسيتمكّن المستخدمون من تنزيل تطبيقات أصغر حجمًا وأكثر تحسينًا.

عند استخدام مكوّن إضافي للميزات تم إيقافه نهائيًا، كان إنشاء تطبيق فوري يتطلّب إنشاء وحدة ميزات أساسية تحتوي على الرموز البرمجية والموارد المشترَكة لجميع الوحدات، بما في ذلك وحدة التطبيق الفوري. تم تضمين بقية الرمز في وحدات ميزات متعددة غير أساسية، وكانت تحتوي على نقاط دخول لتجاربك الفورية. بالنسبة إلى الإصدار المثبَّت من تطبيقك، ربما تضمّن مشروعك وحدة تطبيق منفصلة تحتوي على الرمز البرمجي والأنشطة المطلوبة فقط للتطبيق المثبَّت.

عند نقل تطبيقك إلى تنسيقات Android App Bundle، يستعيد نموذج تطبيقك دور النموذج الأساسي، ويمكنك تنظيم التجارب الفورية أو المثبَّتة الإضافية كوحدات ميزات. وهذا يعني أنّ مشروعك أصبح الآن يشبه إلى حد كبير مشروع تطبيق عاديًا، مع وحدة أساسية مفعَّلة للتجربة الفورية وإمكانية تضمين تجارب فورية إضافية نموذجية.

لنقل مشروع تطبيقك الفوري الحالي واستخدام نموذج التوزيع الأكثر تحسينًا في "مجموعة حزمات تطبيق Android"، اتّبِع الخطوات الموضّحة في الأقسام أدناه.

تحويل وحدة الميزات الأساسية إلى وحدة تطبيق

عليك أولاً تعديل ملف build.gradle لوحدة الميزات الأساسية قبل تحويلها إلى وحدة التطبيق الرئيسية، وذلك باتّباع الخطوات التالية:

  1. احذف السطر baseFeature true.
  2. أزِل أي تبعيات تستخدم إعدادات التبعية feature أو application.

    Groovy

    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، بالإضافة إلى أي إعدادات أخرى لنصوص البرمجة التي تتوقّع أن تكون في وحدة تطبيقك الأساسي، من وحدة com.android.application الحالية إلى وحدة com.android.feature. في ما يلي بعض الأمثلة. في هذه الخطوة، قد يكون من الأسهل نسخ android من build.gradle من وحدة تطبيقك السابقة ولصقها في ملف build.gradle لوحدة التطبيق الجديدة، وذلك حسب إعداد build.gradle المحدّد. ومع ذلك، يجب توخّي الحذر عند إجراء ذلك.

    Groovy

    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:

    Groovy

    // 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.

    Groovy

    // 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. كما هو موضّح في القسم السابق، تأكَّد من نقل إعدادات الإصدار المطلوبة من قِبل المكوّن الإضافي com.android.application إلى وحدة تطبيقك الأساسية، مثل قواعد applicationId أو proguardFiles.

  3. أعِد تسمية الوحدة إلى اسم مثل "installed_feature" على النحو التالي:

    1. افتح لوحة المشروع من خلال اختيار عرض (View) > نوافذ الأدوات (Tool Windows) > المشروع (Project) من شريط القوائم.
    2. انقر بزر الماوس الأيمن على وحدة الميزات واختَر إعادة تصميم > إعادة تسمية.
    3. في مربّع الحوار الذي يظهر، اختَر إعادة تسمية الوحدة وانقر على حسنًا.
    4. أدخِل الاسم الجديد للوحدة وانقر على موافق.
  4. على غرار الخطوة 3، أعِد تسمية وحدة التطبيق الجديدة التي أنشأتها في القسم السابق إلى اسم مثل "app".

  5. أضِف تبعية التنفيذ إلى وحدة "التطبيق" في ملف build.gradle الخاص بوحدة الميزة، كما هو موضّح أدناه.

    Groovy

    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 في وحدة التطبيق الجديدة.

    Groovy

    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، كما هو موضّح أدناه:

    Groovy

    // 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 إلى قائمة وحدات الميزات.

    Groovy

    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، يمكنك استخدامها لنشر كل من الإصدار المثبَّت والإصدار الفوري من تطبيقك على Google Play Console، وطرحهما بشكل منفصل في المسارين الفوري والمثبَّت. بالإضافة إلى ذلك، تتيح لك حِزم التطبيقات عرض حِزم APK محسَّنة تتوافق مع إعدادات جهاز كل مستخدم، وبالتالي لن يضطر المستخدم إلى تنزيل سوى الرموز والموارد التي يحتاج إليها لتشغيل تطبيقك. وهذا يعني أنّه لم يعُد عليك إنشاء حِزم APK متعددة وتوقيعها وإدارتها لتتوافق مع الأجهزة المختلفة، كما سيحصل المستخدمون على عمليات تنزيل أصغر حجمًا وأكثر تحسينًا.

لبدء إنشاء حزمة تطبيق تم تفعيل ميزة التطبيقات الفورية فيها واختبارها، انتقِل إلى إنشاء حزمة التطبيق.