Android hỗ trợ việc có nhiều người dùng trên một thiết bị. Để tìm hiểu thêm, hãy xem phần Hỗ trợ nhiều người dùng. Vì không phải tất cả các gói hệ thống đều hữu ích đối với mọi kiểu người dùng Android, nên bạn có thể sử dụng danh sách cho phép để chỉ định gói hệ thống nào sẽ được cài đặt sẵn trên từng kiểu người dùng. Bằng cách không cài đặt trước các gói hệ thống không cần thiết, bạn có thể tối ưu hoá thời gian tạo người dùng, thời gian bắt đầu và mức sử dụng bộ nhớ.
Sử dụng các tệp XML cấu hình hệ thống, được lập mô hình dựa trên
frameworks/base/data/etc/preinstalled-packages-platform.xml
!
để khai báo gói hệ thống nào sẽ được cài đặt ban đầu cho người dùng mới
dựa trên kiểu người dùng. Lý tưởng nhất là tất cả các gói hệ thống trên thiết bị đều phải có một mục trong tệp XML (được khoá bằng tên tệp kê khai), ngoại trừ các lớp phủ tĩnh. Thay vào đó, các lớp phủ tĩnh sẽ được xử lý tự động theo mục nhập cho gói mục tiêu lớp phủ tương ứng.
Cách thiết bị xử lý các gói hệ thống không có trong danh sách này được kiểm soát bằng chế độ cấu hình.
Kiểu người dùng
Các loại người dùng cơ bản (mỗi người dùng thuộc ít nhất một trong các loại này) là:
Nhóm người dùng | Mô tả |
---|---|
SYSTEM |
Người dùng 0. |
FULL |
Bất kỳ người dùng nào không phải là người dùng hồ sơ. |
PROFILE |
Người dùng hồ sơ. |
Ý nghĩa chính xác của từng cụm từ được định nghĩa trong
frameworks/base/core/java/android/content/pm/UserInfo.java
.
Bạn có thể kiểm soát chi tiết hơn bằng cách chỉ định từng loại người dùng vì
mỗi người dùng chính xác là một trong các loại người dùng này, bao gồm cả loại người dùng AOSP
được xác định trong frameworks/base/core/java/android/os/UserManager.java
và mọi loại người dùng tuỳ chỉnh của OEM được xác định trong
frameworks/base/services/core/java/com/android/server/pm/UserTypeFactory.java.
Xem trang loại người dùng để biết thêm
thông tin.
Hiện tại, các kiểu người dùng AOSP bao gồm:
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
Ví dụ
Sau đây là ví dụ về các trường hợp sử dụng phổ biến nhất:
- Để gói hệ thống được cài đặt sẵn trong người dùng 0 chỉ:
<install-in-user-type package="com.android.example"> <install-in user-type="SYSTEM" /> </install-in-user-type>
- Để gói hệ thống được cài đặt sẵn trên tất cả người dùng (chẳng hạn như trình duyệt web),
tức là được cài đặt trên bất kỳ người dùng nào thuộc loại
FULL
hoặcPROFILE
, hướng đến tất cả người dùng là con người:<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> <install-in user-type="PROFILE" /> </install-in-user-type>
- Để gói hệ thống được cài đặt sẵn trên tất cả người dùng, ngoại trừ người dùng hồ sơ.
Ví dụ: bạn có thể áp dụng điều này cho một ứng dụng hình nền:
<install-in-user-type package="com.android.example"> <install-in user-type="FULL" /> </install-in-user-type>
- Một số gói hệ thống thực sự bắt buộc phải có trên tất cả người dùng, bất kể
loại. Trong những trường hợp này, hãy sử dụng:
<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>
- Bạn cũng có thể sử dụng các tuỳ chọn chi tiết hơn bằng cách chỉ định từng loại người dùng. Ví dụ: mã mẫu sau đây sẽ cài đặt gói này trên mọi người dùng có loại người dùng là hồ sơ được quản lý hoặc khách hoặc thuộc loại cơ sở
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>
thẻ do-not-install-in
Bạn cũng có thể không cho phép cài đặt sẵn gói trên một số kiểu người dùng cụ thể
bằng cách sử dụng thẻ do-not-install-in
. Lưu ý rằng do-not-install-in
các thẻ sẽ ghi đè thẻ install-in
trong bất kỳ tệp nào. Ví dụ:
<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
(loại phụ là FULL),
gói này không được cài đặt vì do-not-install-in
thẻ sẽ được ưu tiên hơn install-in
.
Kiểm soát hành vi bằng config.xml
Giá trị tài nguyên cấu hình config_userTypePackageWhitelistMode
kiểm soát tính năng này và xác định cách thiết bị diễn giải các gói hệ thống
không có mục nhập cho bất kỳ kiểu người dùng nào. Để biết thêm thông tin, hãy xem
frameworks/base/core/res/res/values/config.xml#config_userTypePackageWhitelistMode
.
Trong frameworks/base/core/res/res/values/config.xml
, hãy đặt số nguyên
có tên config_userTypePackageWhitelistMode
thành một tổ hợp
các giá trị sau. Bạn có thể kết hợp các cờ này. Các cờ quan trọng nhất là:
Giá trị | Mô tả |
---|---|
0 (0b0000) |
Tắt. Cài đặt tất cả gói hệ thống. |
1 (0b0001) |
Thực thi. Chỉ cài đặt các gói hệ thống khi có trong danh sách cho phép. |
4 (0b0100) |
Xem mọi gói không được đề cập trong tệp danh sách cho phép là được đưa vào danh sách cho phép ngầm ẩn. |
8 (0b1000) |
Xem mọi gói không được đề cập trong tệp danh sách cho phép là được đưa vào danh sách cho phép ngầm chỉ dành cho người dùng HỆ THỐNG. |
Cấu hình sau đây bật tính năng này (để tuân thủ các thẻ install-in
và do-not-install-in
) nhưng coi mọi gói hệ thống không được đề cập là install-in
đối với tất cả người dùng:
<integer name="config_userTypePackageWhitelistMode">5</integer>