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

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

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

ضبط إصدار وحدة الميزات

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

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

استخدام وحدات الميزات للتسليم المخصَّص

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

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

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

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

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

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

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

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

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

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

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

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

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

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

جافا

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، فعِّل ميزة الدمج عند إنشاء وحدة لميزة.
  • عليك تفعيل SplitCompat ليتمكن تطبيقك من الوصول إلى وحدات الميزات التي تم تنزيلها التي يتم تقديمها عند الطلب.
  • يجب ألا تحدد وحدات الميزات أنشطة في ملف البيان عند ضبط android:exported على true. وذلك لأنه ليس هناك ما يضمن أن الجهاز قد نزّل وحدة الميزة عندما يحاول تطبيق آخر تشغيل النشاط. بالإضافة إلى ذلك، يجب أن يتأكد تطبيقك من أنّه تم تنزيل الميزة قبل محاولة الوصول إلى رمزها وموارده. لمزيد من المعلومات، يُرجى الاطّلاع على إدارة الوحدات المثبَّتة.
  • ولأنّ ميزة "تقديم الميزات في Play" تتطلّب منك نشر تطبيقك باستخدام حِزمة تطبيق، عليك الاطّلاع على المشاكل المعروفة المتعلّقة بحزمة التطبيق.

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

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

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

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

كيف يحدّد نظام Gradle قيمة هذه السمة:

عندما تنشئ وحدة ميزات باستخدام "استوديو Android"، تستخدم بيئة التطوير المتكاملة ما تحدّده على أنّه اسم الوحدة لتحديد الوحدة باعتبارها مشروعًا فرعيًا لنظام 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 يحدّد عنصر 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 متعدّدة تستهدف الأجهزة التي تعمل بالإصدار 4.4 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 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 من أداة الحزم من سطر الأوامر.

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

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

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

مراجع إضافية

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

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

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

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

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

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

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

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

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

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

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

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