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

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) เกี่ยวกับแพ็คเกจใด ๆ ที่ไม่ได้กล่าวถึงในไฟล์รายการที่อนุญาตเนื่องจากได้รับอนุญาตโดยปริยายสำหรับผู้ใช้ SYSTEM เท่านั้น

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

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