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

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

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

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

ประเภทผู้ใช้พื้นฐาน (ผู้ใช้ทุกคนต้องจัดอยู่ในประเภทใดประเภทหนึ่งต่อไปนี้เป็นอย่างน้อย) มีดังนี้

ประเภทของผู้ใช้ คำอธิบาย
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.profile.PRIVATE
  • android.os.usertype.system.HEADLESS

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดง Use Case ที่พบบ่อยที่สุด

  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 เหล่านี้เข้าด้วยกันได้ Flag ที่สำคัญที่สุดมีดังนี้

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

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

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