ב-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
דוגמאות
הדוגמאות הבאות מתייחסות לתרחישי השימוש הנפוצים ביותר:
- כדי שחבילת מערכת תותקן מראש אצל משתמש 0 בלבד:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- כדי שחבילת מערכת תותקן מראש על ידי כל המשתמשים האנושיים (למשל בדפדפן אינטרנט),
כלומר להתקין אותו על כל משתמש מסוג
FULL
אוPROFILE
, שנותנת מענה לכל המשתמשים האנושיים:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- כדי שחבילת מערכת תותקן מראש על ידי כל המשתמשים האנושיים, למעט המשתמשים בפרופיל.
לדוגמה, אפשר להחיל את ההגדרה הזו על אפליקציית טפטים:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- חלק מחבילות המערכת באמת נדרשות להיות זמינות לכל המשתמשים, ללא קשר
מהסוג הזה. במקרים כאלה, צריך להשתמש ב:
<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>
- אפשר גם לציין סוגי משתמשים ספציפיים כדי לקבל אפשרויות מפורטות יותר. לדוגמה, הקוד לדוגמה הבא מתקין את החבילה הזו בכל משתמש שהסוג שלו הוא 'פרופיל מנוהל' או 'אורח', או שהוא מסוג הבסיס
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>