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

Android hỗ trợ 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 gói hệ thống nào cũng hữu ích trên tất cả các loại 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 cần được cài đặt trước trên từng loại 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 tệp XML cấu hình hệ thống, được mô hình hoá trên frameworks/base/data/etc/preinstalled-packages-platform.xml, để khai báo gói hệ thống nào cần được cài đặt ban đầu cho người dùng mới dựa trên loại người dùng của họ. 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.

Loại người dùng

Các loại người dùng cơ sở (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 Mọi người dùng không phải hồ sơ.
PROFILE Người dùng hồ sơ.

Ý nghĩa chính xác của từng loại được xác định 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 loại 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.profile.PRIVATE
  • android.os.usertype.system.HEADLESS

Ví dụ

Các ví dụ sau đây đề cập đến các trường hợp sử dụng phổ biến nhất:

  1. Để một gói hệ thống được cài đặt sẵn chỉ trong người dùng 0:
    <install-in-user-type package="com.android.example">
        <install-in user-type="SYSTEM" />
     </install-in-user-type>
  2. Để một gói hệ thống được cài đặt trước trên tất cả người dùng (chẳng hạn như trình duyệt web), nghĩa là được cài đặt trên bất kỳ người dùng nào thuộc loại FULL hoặc PROFILE, giải quyết tất cả người dùng:
    <install-in-user-type package="com.android.example">
        <install-in user-type="FULL" />
        <install-in user-type="PROFILE" />
    </install-in-user-type>
  3. Để cài đặt trước một gói hệ thống trên tất cả người dùng là con người, 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 bất kỳ người dùng nào 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ể ngăn việc cài đặt trước các gói trên một số loại người dùng cụ thể bằng cách sử dụng thẻ do-not-install-in. Xin lưu ý rằng thẻ do-not-install-in 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ụ của FULL), thì gói này sẽ không được cài đặt vì thẻ do-not-install-in đượ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ỳ loại 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 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ả cá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 ngầm cho phép.
8 (0b1000) Coi 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>