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

يدعم 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 وأي مستخدم مخصص لـ OEM الأنواع المحددة في 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) اعتبار أي حزمة غير مذكورة في ملف القائمة المسموح بها مدرجة في القائمة المسموح بها ضمنيًا لمستخدم النظام فقط.

سيعمل التكوين التالي على تمكين الميزة (بحيث سيتم الالتزام بعلامات install-in do-not-install-in ) ولكنه سيتعامل مع أي حزم نظام غير مذكورة كما لو كانت install-in لجميع المستخدمين:

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