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

אנדרואיד תומך במספר משתמשים במכשיר אחד. למידע נוסף, ראה תמיכה במספר משתמשים . מכיוון שלא כל חבילות המערכת שימושיות בכל סוגי משתמשי אנדרואיד, אתה יכול להשתמש ברשימת היתרים כדי לציין אילו חבילות מערכת יש להתקין מראש בכל סוג של משתמש. על ידי אי התקנה מראש של חבילות מערכת מיותרות, תוכל לייעל את זמני יצירת המשתמש, זמני ההתחלה ושימוש בזיכרון.

השתמש בקובצי 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 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>