Android 9 trở lên hỗ trợ việc tạo các phân vùng product
bằng hệ thống xây dựng Android. Trước đây, Android 8.x đã thực thi việc tách các thành phần dành riêng cho SoC từ phân vùng system
sang phân vùng vendor
mà không dành không gian riêng cho các thành phần dành riêng cho OEM được tạo từ hệ thống xây dựng Android. Android 9 trở lên cung cấp thêm các quyền và tính năng đưa vào danh sách trắng áp dụng cho các ứng dụng riêng tư trên nhiều phân vùng.
Giới thiệu về phân vùng sản phẩm
Nhiều OEM tuỳ chỉnh hình ảnh hệ thống AOSP để triển khai các tính năng của riêng họ cũng như các yêu cầu của nhà mạng. Tuy nhiên, các tuỳ chỉnh như vậy khiến bạn không thể sử dụng một hình ảnh hệ thống cho nhiều SKU phần mềm. Mỗi hình ảnh phải khác nhau để hỗ trợ các tuỳ chỉnh, chẳng hạn như với các ngôn ngữ hoặc nhà mạng khác nhau. Việc sử dụng một phân vùng product
riêng biệt để chứa các tuỳ chỉnh cho phép bạn sử dụng một hình ảnh hệ thống cho nhiều SKU phần mềm. (Phân vùng system
lưu trữ mã chung có thể được chia sẻ giữa nhiều SKU phần mềm). Phân vùng vendor
tiếp tục lưu trữ mã BSP dành riêng cho SoC có thể được chia sẻ giữa nhiều thiết bị dựa trên SoC nhất định.
Việc sử dụng các phân vùng riêng biệt có một số nhược điểm, chẳng hạn như việc quản lý dung lượng ổ đĩa (phải luôn dành một lượng dung lượng hạn chế cho việc tăng trưởng trong tương lai) và duy trì giao diện nhị phân ứng dụng (ABI) ổn định giữa các phân vùng. Trước khi quyết định sử dụng các phân vùng product
, hãy dành thời gian cân nhắc cách triển khai AOSP riêng biệt và các chiến thuật giảm thiểu có thể áp dụng (chẳng hạn như phân vùng lại thiết bị trong quá trình cập nhật qua mạng (OTA), không phải do Google thực hiện mà là do một số OEM thực hiện).
Phân vùng động là một giải pháp phù hợp cho vấn đề này.
Phân vùng sản phẩm và quyền
Trên Android 9 trở lên, thay đổi về quyền và quy trình đưa vào danh sách trắng sẽ ảnh hưởng đến cách bạn cấp quyền cho ứng dụng đặc quyền trên các phân vùng "sản phẩm". Tệp permissions.xml
phải nằm trong cùng một phân vùng với các ứng dụng riêng tư. Việc đặt tệp permissions.xml
trong phân vùng system
cho các ứng dụng đặc quyền sẽ không mở rộng các quyền đó cho các ứng dụng đặc quyền trong phân vùng product
, mặc dù phân vùng trước là phần mở rộng của phân vùng sau.
Để biết thông tin chi tiết về các quyền và quy trình đưa vào danh sách trắng, hãy xem phần Đưa quyền đặc quyền vào danh sách cho phép.
/oem cũ so với /product
Chúng ta có hai loại thuộc tính của phân vùng product
tuỳ thuộc vào việc thực thi giao diện sản phẩm. Ngoài ra, phân vùng product
cũng khác với phân vùng oem
cũ:
Phân vùng | Thuộc tính |
---|---|
oem |
|
product |
|
product (giao diện được thực thi) |
|
Vì những lý do này, Android 9 hỗ trợ phân vùng product
trong khi vẫn duy trì khả năng hỗ trợ cho phân vùng oem
cũ, đối với các thiết bị phụ thuộc vào phân vùng đó. Để tách phân vùng product
khỏi phân vùng system
, Android 11 hỗ trợ thực thi giao diện product
.
/thành phần sản phẩm
Phân vùng product
chứa các thành phần sau:
- Thuộc tính hệ thống dành riêng cho sản phẩm (
/product/build.prop
) - RRO dành riêng cho sản phẩm (
/product/overlay/*.apk
) - Ứng dụng dành riêng cho sản phẩm (
/product/app/*.apk
) - Ứng dụng riêng tư dành riêng cho sản phẩm (
/product/priv-app/*.apk
) - Thư viện dành riêng cho sản phẩm (
/product/lib/*
) - Thư viện Java dành riêng cho sản phẩm (
/product/framework/*.jar
) - Cấu hình hệ thống Khung Android dành riêng cho sản phẩm (
/product/etc/sysconfig/*
và/product/etc/permissions/*
) - Tệp nội dung nghe nhìn dành riêng cho sản phẩm (
/product/media/audio/*
) - Tệp
bootanimation
dành riêng cho sản phẩm
Không có custom_images
Bạn không thể sử dụng custom_images
. Các tính năng này thiếu khả năng hỗ trợ những tính năng sau:
- Cài đặt mô-đun vào một mục tiêu cụ thể.
custom_images
hỗ trợ sao chép cấu phần phần mềm vào một hình ảnh nhưng không thể cài đặt mô-đun vào một phân vùng cụ thể bằng cách chỉ định phân vùng mục tiêu của mô-đun đó là một phần của quy tắc bản dựng. - Hỗ trợ Soong. Không thể tạo
custom_images
bằng hệ thống xây dựng Soong. - Hỗ trợ cập nhật qua mạng không dây (OTA).
custom_images
được dùng làm hình ảnh ROM gốc không thể nhận bản cập nhật OTA.
Duy trì ABI giữa các phân vùng
Phân vùng product
trong Android 9 là phần mở rộng của phân vùng system
. Có một ABI yếu giữa các phân vùng product
và system
, vì vậy, cả hai phải được nâng cấp cùng một lúc và ABI phải dựa trên SDK hệ thống. Nếu SDK hệ thống không bao gồm tất cả các nền tảng API giữa product
và system
, thì OEM phải duy trì ABI của riêng họ giữa hai phân vùng.
Các phân vùng product
và system
có thể phụ thuộc lẫn nhau. Tuy nhiên, các chương trình kiểm thử bằng Hình ảnh hệ thống chung (GSI) phải hoạt động đúng cách mà không cần phân vùng product
.
Khi các giao diện product
được thực thi, phân vùng product
sẽ được tách khỏi phân vùng system
. Phân vùng product
chỉ sử dụng các giao diện được phép từ phân vùng system
.
Phân vùng product
không được có bất kỳ phần phụ thuộc nào thông qua các giao diện không ổn định trên phân vùng vendor
. Nghiêm cấm tương tác trực tiếp giữa các phân vùng product
và vendor
.
(Điều này do SEpolicy thực thi.)
Triển khai phân vùng sản phẩm
Trước khi triển khai một phân vùng sản phẩm mới, hãy xem lại các thay đổi liên quan đến phân vùng sản phẩm trong AOSP. Sau đó, để thiết lập product
, hãy thêm các cờ bản mạch hoặc bản dựng sản phẩm sau:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
cho/product/build.prop
. Các giá trị này phải nằm trong$(call inherit-product path/to/device.mk)
, như trongPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Cài đặt mô-đun vào phân vùng sản phẩm
Sử dụng các cờ bản dựng sau để cài đặt mô-đun vào phân vùng product
.
product_specific: true
trongAndroid.bp
LOCAL_PRODUCT_MODULE := true
trongAndroid.mk
Bật tính năng Xác minh quy trình khởi động
Để ngăn phần mềm độc hại can thiệp vào phân vùng product
, hãy bật tính năng Khởi động được xác minh của Android (AVB) cho phân vùng đó (giống như bạn làm cho các phân vùng vendor
và system
). Để bật AVB, hãy thêm các cờ bản dựng sau: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.