แพ็กเกจระบบที่ติดตั้งไว้ล่วงหน้า

Android รองรับผู้ใช้หลายคนในอุปกรณ์เครื่องเดียว หากต้องการทราบข้อมูลเพิ่มเติม ดูการรองรับผู้ใช้หลายคน เนื่องจากแพ็กเกจระบบบางรายการอาจไม่เป็นประโยชน์สำหรับผู้ใช้ Android บางประเภท คุณจึงใช้รายการที่อนุญาตเพื่อระบุแพ็กเกจระบบที่ควรติดตั้งไว้ล่วงหน้าสำหรับผู้ใช้แต่ละประเภทได้ การไม่ติดตั้งแพ็กเกจระบบที่ไม่จำเป็นไว้ล่วงหน้าจะช่วยให้คุณเพิ่มประสิทธิภาพเวลาในการสร้างผู้ใช้ เวลาเริ่มต้น และการใช้หน่วยความจำได้

ใช้ไฟล์ XML การกำหนดค่าระบบซึ่งอิงตาม frameworks/base/data/etc/preinstalled-packages-platform.xml เพื่อประกาศว่าควรติดตั้งแพ็กเกจระบบใดให้กับผู้ใช้ใหม่ตั้งแต่แรกโดยอิงตามประเภทผู้ใช้ แพ็กเกจระบบทั้งหมดในอุปกรณ์ควรมี รายการในไฟล์ XML (ผูกกับชื่อไฟล์ Manifest) ยกเว้นการวางซ้อนแบบคงที่ ซึ่งระบบดำเนินการกับรายการโดยอัตโนมัติ ตามรายการสำหรับ แพ็กเกจเป้าหมายซ้อนทับ โหมดการกําหนดค่าจะควบคุมวิธีที่อุปกรณ์ควรจัดการแพ็กเกจระบบที่ไม่ได้แสดงที่นี่

ประเภทผู้ใช้

ประเภทผู้ใช้พื้นฐาน (ผู้ใช้ทุกคนคือประเภทต่อไปนี้อย่างน้อย 1 ประเภท)

ประเภทของผู้ใช้ คำอธิบาย
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 base
    <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 เป็นชุดค่าผสมของ ค่าต่อไปนี้ แฟล็กเหล่านี้รวมเข้าด้วยกันได้ Flag ที่สำคัญที่สุดมีดังนี้

ค่า คำอธิบาย
0 (0b0000) ปิดใช้ ติดตั้งแพ็กเกจระบบทั้งหมด
1 (0b0001) บังคับใช้ ติดตั้งเฉพาะแพ็กเกจระบบเมื่ออยู่ในรายการที่อนุญาต
4 (0b0100) ถือว่าแพ็กเกจที่ไม่ได้กล่าวถึงในไฟล์รายการที่อนุญาตอยู่ในรายการที่อนุญาตโดยนัย
8 (0b1000) เกี่ยวกับแพ็กเกจใดๆ ที่ไม่ได้ระบุไว้ในไฟล์รายการที่อนุญาตว่าเป็นรายการที่อนุญาตโดยปริยาย สำหรับผู้ใช้ SYSTEM เท่านั้น

การกำหนดค่าต่อไปนี้จะเปิดใช้ฟีเจอร์ (เพื่อให้ install-in และ ทำตามแท็ก do-not-install-in รายการ) แต่ดำเนินการกับแท็กทั้งหมดที่ไม่ได้พูดถึง แพ็กเกจระบบเสมือนเป็น install-in สำหรับผู้ใช้ทุกคน

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