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