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 ที่พบบ่อยที่สุด
- หากต้องการให้ระบบติดตั้งแพ็กเกจไว้ล่วงหน้าในผู้ใช้ 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
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>