חבילות מערכת שהותקנו מראש

ב-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. חשוב לזכור שתגים מסוג 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>