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

يتيح نظام التشغيل 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.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 تلغي علامات 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>