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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

إنشاء معرّف موارد منتظم (URI) لمورد معيَّن

إذا أردت الوصول إلى مورد مخزّن في وحدة ميزات باستخدام معرّف الموارد المنتظم (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

ويمكن للتطبيق بعد ذلك استخدام معرّف الموارد المنتظم (URI) هذا للوصول إلى مورد وحدة الميزات.

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

لقطة شاشة لأداة تحليل APK تفحص محتويات ملف مصدر مجمّع.

الشكل 2. استخدم أداة تحليل APK لفحص اسم الحزمة في ملف موارد مجمع.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

لا يمكنك ضبط عنصر 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" />
</dist:module>
تحدِّد هذه السياسة ما إذا كان سيتم تضمين الوحدة في حِزم APK متعددة تستهدف الأجهزة التي تعمل بنظام التشغيل Android 4.4 (المستوى 20 من واجهة برمجة التطبيقات) والإصدارات الأقدم.

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

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

للاطّلاع على مزيد من المعلومات حول عمليات التنزيل عند التثبيت، يمكنك الاطّلاع على ضبط التسليم في وقت التثبيت.

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

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

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

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

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

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

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

للاطّلاع على مزيد من المعلومات حول عمليات التنزيل عند الطلب، راجِع ضبط العرض عند الطلب.

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

مراجع إضافية

لمزيد من المعلومات حول استخدام وحدات الميزات، جرِّب المراجع التالية.

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

الفيديوهات الطويلة

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

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

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

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

واجهة برمجة تطبيقات اللغات الإضافية

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

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

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

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