حِزم النظام المثبَّتة مسبقًا

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

استخدِم ملفات XML لإعدادات النظام المستندة إلى frameworks/base/data/etc/preinstalled-packages-platform.xml، لتحديد حِزم النظام التي يجب تثبيتها في البداية للمستخدمين الجُدد استنادًا إلى نوع المستخدم. من المفترض أن تحتوي جميع حِزم النظام على الجهاز على إدخال في ملف XML (مفتاحه هو اسم البيان)، باستثناء التراكبات الثابتة، التي تتم معالجتها تلقائيًا وفقًا لإدخال الحزمة المستهدفة للتراكب المعني. يتم التحكّم في الطريقة التي يجب أن يتعامل بها الجهاز مع حِزم النظام غير المُدرَجة هنا من خلال وضع الضبط.

أنواع المستخدمين

في ما يلي أنواع المستخدمين الأساسية (يندرج كل مستخدم ضمن نوع واحد على الأقل من هذه الأنواع):

نوع المستخدم الوصف
SYSTEM المستخدم 0
FULL أي مستخدم بشري غير مرتبط بملف شخصي
PROFILE ملف شخصي لمستخدم بشري

يتم تحديد المعنى الدقيق لكل منها في frameworks/base/core/java/android/content/pm/UserInfo.java.

يمكن الحصول على مزيد من التحكّم الدقيق من خلال تحديد أنواع المستخدمين الفرديين لأنّ كل مستخدم يندرج تمامًا ضمن أحد أنواع المستخدمين هذه، بما في ذلك أنواع مستخدمي AOSP المحدّدة في frameworks/base/core/java/android/os/UserManager.java وأي أنواع مستخدمين مخصّصة لجهات تصنيع المعدّات الأصلية محدّدة في frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java. يمكنك الاطّلاع على صفحة أنواع المستخدمين للحصول على مزيد من المعلومات. تشمل أنواع مستخدمي AOSP حاليًا ما يلي:

  • android.os.usertype.full.SYSTEM
  • android.os.usertype.full.SECONDARY
  • android.os.usertype.full.GUEST
  • android.os.usertype.full.DEMO
  • android.os.usertype.full.RESTRICTED
  • android.os.usertype.profile.MANAGED
  • android.os.usertype.profile.PRIVATE
  • android.os.usertype.system.HEADLESS

أمثلة

تتناول الأمثلة التالية حالات الاستخدام الأكثر شيوعًا:

  1. لكي يتم تثبيت حزمة نظام مسبقًا في حساب المستخدم 0 فقط:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. لكي تكون حزمة النظام مثبَّتة مسبقًا على جميع المستخدمين (مثل متصفّح الويب)، أي أن يتم تثبيتها على أي مستخدم من النوع FULL أو PROFILE، الذي يخاطب جميع المستخدمين:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. لتثبيت حزمة نظام مسبقًا على جميع المستخدمين باستثناء مستخدمي الملفات الشخصية على سبيل المثال، يمكن تطبيق ذلك على تطبيق خلفيات:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
    </install-in-user-type>
  4. يجب أن تكون بعض حِزم النظام متوفّرة لجميع المستخدمين بغض النظر عن نوعها. في هذه الحالات، استخدِم:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  5. تتوفّر أيضًا خيارات أكثر دقة من خلال تحديد أنواع مستخدمين فرديين. على سبيل المثال، يُثبِّت نموذج الرمز البرمجي التالي هذه الحزمة على أي مستخدم يكون نوع المستخدم لديه هو ملف شخصي مُدار أو ضيف أو من النوع SYSTEM الأساسي.
    <install-in-user-type package="com.android.example">
        <install-in user-type="android.os.usertype.profile.MANAGED" />
        <install-in user-type="android.os.usertype.full.GUEST" />
        <install-in user-type="SYSTEM">
    </install-in-user-type>

علامة do-not-install-in

يمكن أيضًا منع تثبيت الحِزم مسبقًا على أنواع مستخدمين معيّنة باستخدام علامة do-not-install-in. يُرجى العلم أنّ علامات do-not-install-in تلغي علامات install-in في أي ملف. مثلاً:

<install-in-user-type package="com.android.example">
    <install-in user-type="FULL" />
    <do-not-install-in user-type="android.os.usertype.full.GUEST"/>
</install-in-user-type>
إذا كان المستخدم من النوع android.os.usertype.full.GUEST (نوع فرعي من FULL)، لا يتم تثبيت هذه الحزمة لأنّ علامة do-not-install-in تحظى بالأولوية على install-in.

التحكّم في السلوك باستخدام config.xml

تتحكّم قيمة مورد الضبط config_userTypePackageWhitelistMode في هذه الميزة وتحدّد كيفية تفسير الجهاز لحِزم النظام التي لا تحتوي على إدخال لأي نوع مستخدم. لمزيد من المعلومات، يُرجى الاطّلاع على frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode.

في frameworks/base/core/res/res/values/config.xml، اضبط عددًا صحيحًا يُسمى config_userTypePackageWhitelistMode على مجموعة من القيم التالية. ويمكن دمج هذه الإشارات. في ما يلي أهم الإشارات:

القيمة الوصف
0 (0b0000) إيقاف تثبيت جميع حِزم النظام
1 (0b0001) فرض. لا تثبِّت حِزم النظام إلا عندما تكون مُدرَجة في القائمة المسموح بها.
4 (0b0100) اعتبار أي حزمة غير مذكورة في ملف القائمة المسموح بها مُدرَجة ضمن القائمة المسموح بها ضمنيًا
8 (0b1000) يجب اعتبار أي حزمة غير مذكورة في ملف القائمة المسموح بها مُدرَجة ضمن القائمة المسموح بها بشكل ضمني لمستخدم SYSTEM فقط.

تفعِّل الإعدادات التالية الميزة (كي يتم الالتزام بعلامتَي install-in و do-not-install-in) ولكن تتعامل مع أي حزم نظام غير مُشار إليها كما لو كانت install-in لجميع المستخدمين:

<integer name="config_userTypePackageWhitelistMode">5</integer>