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

Android hỗ trợ có nhiều người dùng trên một thiết bị. Để tìm hiểu thêm, hãy xem 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 với mọi 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 sẽ được cài đặt sẵn cho từng loại người dùng. Bằng cách không cài đặt sẵn các gói hệ thống không cần thiết, bạn có thể tối ưu hóa thời gian tạo người dùng, thời gian khởi động và mức sử dụng bộ nhớ.

Sử dụng các tệp XML cấu hình hệ thống, được mô hình hó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 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ị phải có một mục trong tệp XML (được khóa theo tên tệp kê khai), ngoại trừ các lớp phủ tĩnh, thay vào đó được xử lý tự động theo mục nhập cho gói mục tiêu lớp phủ tương ứng của chúng. Cách thiết bị xử lý các gói hệ thống không được liệt kê ở đây được kiểm soát bởi chế độ cấu hình .

Loại người dùng

Các loại người dùng cơ bản (mỗi người dùng sẽ thuộc ít nhất một trong các loại này) là:

Loại người dùng Sự miêu tả
SYSTEM Người dùng 0.
FULL Bất kỳ người dùng không có hồ sơ con người.
PROFILE Một hồ sơ người dùng con người.

Ý 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 .

Có thể đạt được quyền kiểm soát chi tiết hơn bằng cách chỉ định từng loại người dùng riêng lẻ vì mỗi người dùng chính xác là một trong những loại người dùng này, bao gồm các loại người dùng AOSP được xác định trong frameworks/base/core/java/android/os/UserManager.java và bất kỳ người dùng tùy chỉnh OEM nào các loại đượ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.system.HEADLESS

Ví dụ

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

  1. Để gói hệ thống chỉ được cài đặt sẵn trong người dùng 0:
    <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 con người (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 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ụ: điều này có thể được áp dụng cho ứ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 nào. 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. Các tùy chọn chi tiết hơn cũng có sẵ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ẻ không cài đặt

Các gói cũng có thể được ngăn cài đặt sẵn trên các loại người dùng cụ thể bằng cách sử dụng thẻ do-not-install-in . 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 con FULL), 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 , đặt số nguyên có tên config_userTypePackageWhitelistMode thành kết hợp của các giá trị sau. Những lá cờ này có thể được kết hợp. Những lá cờ quan trọng nhất là:

Giá trị Sự miêu tả
0 (0b0000) Vô hiệu hóa. Cài đặt tất cả các gói hệ thống.
1 (0b0001) Thi hành. Chỉ cài đặt các gói hệ thống khi có trong danh sách cho phép.
4 (0b0100) Bất kỳ gói nào không được đề cập trong tệp danh sách cho phép đều được coi là được đưa vào danh sách cho phép.
8 (0b1000) Hãy coi mọi gói không được đề cập trong tệp danh sách cho phép đều được đưa vào danh sách cho phép hoàn toàn chỉ dành cho người dùng HỆ THỐNG.

Cấu hình sau sẽ kích hoạt tính năng này (để các thẻ install-indo-not-install-in sẽ được tuân thủ) nhưng sẽ xử lý mọi gói hệ thống không được đề cập như thể chúng là install-in cho tất cả người dùng:

<integer name="config_userTypePackageWhitelistMode">5</integer>