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

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

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

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

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

ملاحظة: تتضمَّن هذه الوحدة جميع معلومات البيان والتوقيع المطلوبة لإنشاء تطبيقك وحزمه على شكل حِزمة APK أو مجموعة حزمات تطبيق Android.

ميزات إضافية نموذجية يمكن للمستخدمين تنزيلها عند الطلب 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 واختبارها ونشرها.

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

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

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

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

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

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

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

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

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

  3. أعد تسمية الوحدة إلى شيء مثل "installed_feature" (التثبيت) على النحو التالي:

    1. افتح جزء المشروع من خلال اختيار عرض > نوافذ الأدوات > المشروع من شريط القوائم.
    2. انقر بزر الماوس الأيمن على وحدة الميزات وحدد إعادة العوامل > إعادة التسمية.
    3. في مربّع الحوار الذي يظهر، اختَر إعادة تسمية الوحدة وانقر على حسنًا.
    4. أدخِل الاسم الجديد للوحدة وانقر على حسنًا.
  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
    }
    

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

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

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