Gói hệ thống đã cài đặt sẵn

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:

  1. Để 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>
  2. Để 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ặc PROFILE, 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>
  3. Để 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>
  4. 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>
  5. 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>
Nếu người dùng thuộc loại 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-indo-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>