نظرة عامة على عرض الميزات في Play

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

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

إعدادات تصميم وحدة الميزات

عند إنشاء وحدة ميزة جديدة باستخدام "استوديو Android"، يطبِّق محرّر بيئة التطوير المتكامل المكوّن الإضافي التالي لـ Gradle على ملف build.gradle للوحدة.

// The following applies the dynamic-feature plugin to your feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your feature module.

plugins {
  id 'com.android.dynamic-feature'
}

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

العناصر التي يجب عدم تضمينها في إعدادات إنشاء وحدة الميزات

ولأنّ كل وحدة ميزة تعتمد على الوحدة الأساسية، فإنّها ترث أيضًا إعدادات معيّنة. لذلك، عليك حذف ما يلي في ملفbuild.gradle لوحدة الميزات:

  • إعدادات التوقيع: يتم توقيع حِزم التطبيقات باستخدام إعدادات التوقيع التي تحدّدها في الوحدة الأساسية.
  • موقع minifyEnabled: يمكنك تفعيل تصغير الرموز البرمجية لمشروع تطبيقك بالكامل من إعدادات الإصدار للوحدة الأساسية فقط. لذلك، يجب حذف هذا الموقع من وحدات الميزات. ومع ذلك، يمكنك تحديد قواعد ProGuard إضافية لكل وحدة ميزة.
  • versionCode وversionName: عند إنشاء حِزمة تطبيقك، يستخدِم Gradle معلومات إصدار التطبيق التي تقدّمها الوحدة الأساسية. يجب حذف هذه السمات من ملف build.gradle الخاص بوحدة الميزات.

إنشاء علاقة بالوحدة الأساسية

عندما ينشئ Android Studio وحدة الميزات، يجعلها مرئية للوحدة الأساسية من خلال إضافة سمة android.dynamicFeatures إلىملفbuild.gradle الوحدة الأساسية، كما هو موضّح أدناه:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}

بالإضافة إلى ذلك، يتضمّن "استوديو Android" الوحدة الأساسية كعنصر تابع لوحدة الميزات، كما هو موضّح أدناه:

// In the feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}

تحديد قواعد ProGuard إضافية

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

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}

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

نشر تطبيقك

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

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

  1. اختَر تشغيل > تعديل الإعدادات من شريط القوائم.
  2. من اللوحة اليمنى من مربّع حوار إعدادات التشغيل/التصحيح، اختَر إعداد تطبيق Android المطلوب.
  3. ضمن الميزات الديناميكية المطلوب نشرها في علامة التبويب الإعدادات العامة، ضَع علامة في المربّع بجانب كل وحدة ميزة تريد تضمينها عند نشر تطبيقك.
  4. انقر على موافق.

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

استخدام وحدات الميزات لتخصيص عرض الإعلانات

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

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

يمكنك إنشاء تطبيق يتيح للمستخدمين شراء السلع وبيعها في سوق على الإنترنت. يمكنك تقسيم كل وظيفة من وظائف التطبيق التالية إلى وحدات ميزات منفصلة بشكل معقول:

  • تسجيل الدخول إلى الحساب وإنشاؤه
  • تصفُّح السوق
  • عرض سلعة للبيع
  • معالجة الدفعات

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

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

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

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

ومع ذلك، لتقليل حجم التطبيق المثبَّت، يمكن للتطبيق طلب حذف الميزة بعد أن يُكمل المستخدم التدريب.

تقسيم تطبيقك إلى وحدات باستخدام وحدات ميزات لا تضبط أي خيارات متقدمة للعرض

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

التسليم عند الطلب السماح لتطبيقك بطلب وحدات الميزات وتنزيلها حسب الحاجة إذا كان% 20 فقط من مستخدمي تطبيق السوق ينشرون سلعًا للبيع، فإنّ من الاستراتيجيات الجيدة لتقليل حجم التنزيل الأولي لمعظم المستخدمين هي إتاحة ميزة التقاط الصور، بما في ذلك وصف سلعة، وعرض سلعة للبيع كتنزيل عند الطلب. وهذا يعني أنّه يمكنك ضبط وحدة الميزات لتحميل وظائف البيع في التطبيق فقط عندما يُظهر مستخدم اهتمامًا بعرض سلع للبيع في السوق.

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

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

من خلال العرض الفوري، يمكنك استخدام تقنية "تطبيقات Google Play الفورية" للسماح للمستخدمين بتجربة ميزات معيّنة من تطبيقك على الفور بدون تثبيته.

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

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

إنشاء معرّف موارد منتظم لمورد

إذا كنت تريد الوصول إلى مورد مخزّن في وحدة ميزة باستخدام معرّف الموارد المنتظم (URI)، إليك كيفية إنشاء معرّف URI لمورد وحدة الميزة باستخدام Uri.Builder():

Kotlin

val uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build()

Java

String uri = Uri.Builder()
                .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
                .authority(context.getPackageName()) // Look up the resources in the application with its splits loaded
                .appendPath(resources.getResourceTypeName(resId))
                .appendPath(String.format("%s:%s",
                  resources.getResourcePackageName(resId), // Look up the dynamic resource in the split namespace.
                  resources.getResourceEntryName(resId)
                  ))
                .build().toString();

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

على سبيل المثال، لإنشاء عنوان URI، لنفترض أنّ لديك تطبيقًا و وحدات ميزات تحمل الأسماء التالية:

  • اسم حزمة التطبيق: com.example.my_app_package
  • اسم حزمة موارد العنصر: com.example.my_app_package.my_dynamic_feature

إذا كان الرمز resId في مقتطف الرمز أعلاه يشير إلى مورد ملف خام باسم "my_video" في وحدة الميزات، سيؤدي الرمز Uri.Builder() أعلاه إلى عرض ما يلي:

android.resource://com.example.my_app_package/raw/com.example.my_app_package.my_dynamic_feature:my_video

ويمكن بعد ذلك لتطبيقك استخدام عنوان URL هذا للوصول إلى مورد وحدة الميزات.

للتحقّق من صحة المسارات في معرّف الموارد المنتظم، يمكنك استخدام أداة تحليل حِزم APK لفحص حزمة APK الخاصة بوحدة الميزات وتحديد اسم الحزمة:

لقطة شاشة لأداة APK Analyzer وهي تتحقّق من محتوى ملف موارد مجمَّع
الشكل 1. استخدِم أداة تحليل APK لفحص اسم الحزمة في ملف موارد مجمَّع.

اعتبارات حول وحدات الميزات

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

  • قد يؤدي تثبيت 50 وحدة ميزة أو أكثر على جهاز واحد، من خلال العرض الشَرطي أو العرض عند الطلب، إلى حدوث مشاكل في الأداء. يتم تلقائيًا تضمين الوحدات التي يتم عرضها أثناء التثبيت والتي لم يتم ضبطها على أنّها قابلة للإزالة في الوحد ة الأساسية، ولا يتم احتسابها إلا كوحدة ميزة واحدة على كل جهاز.
  • حدِّد 10 وحدات أو أقل كحد أقصى للوحدات التي يتم ضبطها على أنّها قابلة للإزالة من أجل إرسالها أثناء عملية التثبيت. وفي حال عدم إجراء ذلك، قد يزداد وقت تنزيل تطبيقك وتثبيته.
  • لا تتوفّر ميزة تنزيل الميزات وتثبيتها عند الطلب إلا على الأجهزة التي تعمل بالإصدار 5.0 من نظام التشغيل Android (المستوى 21 من واجهة برمجة التطبيقات) والإصدارات الأحدث. لإتاحة ميزتك لإصدارات Android الأقدم، فعِّل ميزة دمج عند إنشاء وحدة ميزة.
  • فعِّل SplitCompat، لكي يتمكّن تطبيقك من الوصول إلى وحدات الميزات التي تم تنزيلها والتي يتم عرضها عند الطلب.
  • يجب ألا تحدِّد وحدات الميزات الأنشطة في ملف البيان مع ضبط android:exported على true. ويعود السبب في ذلك إلى أنّه ما مِن ضمان بأنّه قد تم تنزيل وحدة الميزات على الجهاز عند محاولة تطبيق آخر لبدء النشاط. بالإضافة إلى ذلك، يجب أن يؤكّد تطبيقك أنّه تم تنزيل الميزة قبل محاولة الوصول إلى رمزها البرمجي ومواردها. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إدارة الوحدات المثبَّتة.
  • بما أنّ ميزة "عرض الميزات في Play" تتطلّب منك نشر تطبيقك باستخدام حِزمة تطبيق، تأكَّد من أنّك على دراية بالمشاكل المعروفة المتعلّقة بحِزم التطبيقات.

مرجع بيان وحدة الميزات

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

السمة الوصف
<manifest هذه هي قطعة قياسية <manifest>.
xmlns:dist="http://schemas.android.com/apk/distribution" تُحدِّد مساحة اسم XML جديدة dist: يتم وصفها أدناه.
split="split_name" عندما ينشئ "استوديو Android" حِزمة تطبيقك، يُدرِج هذه السمة نيابةً عنك. لذلك، يجب عدم تضمين هذه السمة أو تعديلها بنفسك.

يحدِّد اسم الوحدة الذي يحدّده تطبيقك عند طلب وحدة عند الطلب باستخدام مكتبة "عرض الميزات في Play".

كيفية تحديد Gradle لقيمة هذه السمة:

عند إنشاء وحدة ميزة باستخدام IDE Android Studio، يستخدم IDE تلقائيًا ما تحدّده كأحد أسماء الوحدات لتحديد الوحدة كمشروع فرعي في Gradle في "ملف إعدادات Gradle".

عند إنشاء حِزمة تطبيقك، يستخدم Gradle العنصر الأخير من مسار المشروع الفرعي لإدراج سمة البيان هذه في بيان الوحدة. على سبيل المثال، إذا أنشأت وحدة ميزة جديدة في دليل MyAppProject/features/ وحددت "dynamic_feature1" كـ اسم الوحدة، يضيف IDE ':features:dynamic_feature1' كمشروع فرعي فيملف settings.gradle. عند إنشاء حِزمة تطبيقك، يُدخل Gradle بعد ذلك <manifest split="dynamic_feature1"> في بيان الوحدة.

android:isFeatureSplit="true | false"> عندما ينشئ "استوديو Android" حِزمة تطبيقك، يُدرِج هذه السمة نيابةً عنك. لذلك، يجب عدم تضمين هذه السمة أو تعديلها يدويًا.

تُحدِّد هذه السمة أنّ هذه الوحدة هي وحدة ميزة. في البيانَين الواردَين في الوحدة الأساسية وحِزم APK الخاصة بالضبط، إما يتم حذف هذه السمة أو ضبطها على false.

‎<dist:module تحدِّد السمات التي تحدّد كيفية تجميع الوحدة و توزيعها كحِزم APK.
dist:instant="true | false" تُستخدَم لتحديد ما إذا كان يجب أن تكون الوحدة متاحة من خلال تطبيقات Google Play الفورية كأحد التجارب الفورية.

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

لا يمكنك ضبط عنصر XML هذا على true مع ضبط <dist:on-demand/> أيضًا. ومع ذلك، سيظل بإمكانك طلب تنزيل وحدات الميزات المفعَّلة للتطبيقات الفورية عند الطلب كتجارب فورية باستخدام مكتبة "عرض الميزات في Play". عندما ينزّل أحد المستخدمين تطبيقك ويثبّته، يقوم الجهاز تلقائيًا بتنزيل وحدات الميزات المفعَّلة بشكل فوري في تطبيقك وتثبيتها، بالإضافة إلى حزمة APK الأساسية.

dist:title="@string/feature_name"> تحدِّد هذه السمة عنوانًا موجهًا للمستخدم للمكوّن. على سبيل المثال، قد يعرض الجهاز هذا العنوان عندما يطلب تأكيد التنزيل.

عليك تضمين مورد السلسلة لهذا العنوان في ملف module_root/src/source_set/res/values/strings.xml للوحدة الأساسية.

<dist:fusing dist:include="true | false" /> لتحديد ما إذا كان سيتم تضمين الوحدة في حِزم APK متعددة تستهدف الأجهزة التي تعمل بنظام التشغيل Android 4.4 (المستوى 20 لواجهة برمجة التطبيقات) والإصدارات الأقدم.

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

<dist:delivery> تُحاط الخيارات التي تخصّص عرض الوحدة، كما هو موضّح أدناه. يُرجى العِلم أنّه على كلّ وحدة ميزة ضبط نوع واحد فقط من خيارات العرض المخصّصة هذه.
<dist:install-time> تشير إلى أنّ الوحدة يجب أن تكون متاحة في وقت التثبيت. هذا هو السلوك التلقائي لمكوّنات الميزات التي لا تحدّد نوعًا آخر من خيار التسليم المخصّص.

للاطّلاع على مزيد من المعلومات عن عمليات التنزيل أثناء التثبيت، يُرجى الاطّلاع على مقالة ضبط عملية التسليم أثناء التثبيت.

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

<dist:removable dist:value="true | false" />

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

عند ضبط removable على true: لن يتم دمج الوحدات التي يتم عرضها أثناء التثبيت في الوحدة الأساسية. اضبط القيمة على true إذا أردت إلغاء تثبيت الوحدات في المستقبل. ومع ذلك، قد يؤدي ضبط عدد كبير جدًا من الوحدات لتكون قابلة للإزالة إلى زيادة وقت تثبيت تطبيقك.

الإعداد التلقائي هو false. لا يلزم ضبط قيمة هذه في البيان إلا إذا كنت تريد إيقاف دمج ملف وحدة ميزة.

ملاحظة: لا تتوفّر هذه الميزة إلا عند استخدام الإصدار 4.2 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو عند استخدام الإصدار 1.0 من أداة bundletool من سطر الأوامر.

</dist:install-time>  
<dist:on-demand /> تُستخدَم لتحديد أنّ الوحدة يجب أن تكون متاحة كتنزيل عند الطلب. وهذا يعني أنّ الوحدة غير متاحة في وقت التثبيت، ولكن قد يطلب تطبيقك تنزيلها لاحقًا.

لمزيد من المعلومات حول عمليات التنزيل عند الطلب، يُرجى الاطّلاع على مقالة ضبط إعدادات التسليم عند الطلب.

</dist:delivery>
</dist:module>
‎<application
android:hasCode‎="true | false">‎
...‎
‎</application>‎
إذا لم تنشئ وحدة الميزات أي ملفات DEX، أي أنّها لا تحتوي على أي رمز برمجي يتم تجميعه لاحقًا بتنسيق ملف DEX، عليك تنفيذ ما يلي:
  1. اضبط android:hasCode على "false" في ملف بيان وحدة الميزات.
  2. أضِف ما يلي إلى بيان الوحدة الأساسية:
    <application
      android:hasCode="true"
      tools:replace="android:hasCode">
      ...
    </application>
...
‎</manifest>

مصادر إضافية

لمزيد من المعلومات عن استخدام وحدات الميزات، يمكنك الاطّلاع على المراجع التالية.

مشاركات المدونة

الفيديوهات

بنود الخدمة وسلامة البيانات

يعني الوصول إلى "مكتبة إرسال الميزات في Play" أو استخدامها موافقتك على بنود خدمة حزمة تطوير البرامج Play Core. يُرجى قراءة وفهم جميع الأحكام والسياسات السارية قبل الوصول إلى المكتبة.

أمان البيانات

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

Additional languages API

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

عرض الميزات في Play

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

نهدف إلى الالتزام بالشفافية قدر الإمكان، ولكنّك وحدك المسؤول عن تحديد كيفية ملء نموذج قسم "أمان البيانات" في Google Play بشأن ممارسات جمع بيانات المستخدمين ومشاركتها وأمانها في تطبيقك.