Android 9 trở lên có hỗ trợ xây dựng
product
phân vùng bằng hệ thống xây dựng Android. Trước đây,
Android 8.x thực thi việc phân tách các thành phần dành riêng cho SoC
từ phân vùng system
sang vendor
mà không dành riêng không gian 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
quyền
và danh sách trắng áp dụng cho các ứng dụng riêng trên các phân vùng khác nhau.
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 mình,
cũng như yêu cầu của nhà mạng. Tuy nhiên, các tuỳ chỉnh đó khiến
không thể sử dụng một hình ảnh hệ thống duy nhất cho nhiều SKU phần mềm. Một
hình ảnh phải khác nhau để hỗ trợ các tuỳ chỉnh, chẳng hạn như với
địa phương hoặc mạng di động khác nhau. Sử dụng
để phân vùng product
riêng biệt để chứa các tuỳ chỉnh
có thể sử dụng một hình ảnh hệ thống cho nhiều SKU phần mềm. (Các
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ã CPF dành riêng cho SoC có thể được chia sẻ giữa nhiều
dựa trên SoC đã cho.
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ư
quản lý dung lượng ổ đĩa (một lượng dung lượng giới hạn phải được dành riêng cho tương lai
tăng trưởng) và duy trì
một giao diện nhị phân của ứng dụng ổn định (ABI) giữa các phân vùng. Trước
quyết định sử dụng product
phân vùng, hãy dành thời gian xem xét
cách triển khai AOSP riêng biệt và các chiến thuật giảm thiểu khả năng (chẳng hạn như
phân vùng lại thiết bị trong thời gian không dây
(OTA), đây là việc Google không thực hiện nhưng do một số OEM (Nhà sản xuất thiết bị gốc) thực hiện).
Phân vùng động là
một giải pháp hay cho vấn đề này.
Quyền và phân vùng sản phẩm
Trên Android 9 trở lên, có sự thay đổi về quyền
và quy trình đưa vào danh sách trắng ảnh hưởng đến cách bạn cấp quyền cho ứng dụng riêng
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 ứng dụng riêng. Đặt
Tệp permissions.xml
trong phân vùng system
đối với ứng dụng riêng không mở rộng các quyền đó sang ứng dụng riêng trong product
phân vùng, mặc dù phân vùng trước đây là mở rộng của phân vùng sau.
Để biết chi tiết về các quyền và quá trình trong danh sách trắng, hãy xem
Danh sách cho phép các đặc quyền.
/oem 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
trên sản phẩm
thực thi giao diện. Ngoài ra, phân vùng product
cũng khác
so với phân vùng oem
cũ:
Phân vùng | Thuộc tính |
---|---|
oem |
|
product |
|
product (giao diện thực thi) |
|
Vì những lý do này, Android 9 hỗ trợ phân vùng product
trong khi
vẫn hỗ trợ phân vùng oem
cũ cho các thiết bị phụ thuộc vào
nó. Để tách phân vùng product
khỏi system
phân vùng, Android 11 hỗ trợ
thực thi 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 theo sản phẩm cụ thể (
/product/build.prop
) - RRO theo sản phẩm cụ thể (
/product/overlay/*.apk
) - Ứng dụng dành riêng cho sản phẩm (
/product/app/*.apk
) - Ứng dụng riêng cho từng 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ó hình ảnh tùy chỉnh
Bạn không thể dùng custom_images
. Họ thiếu hỗ trợ cho
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 mục tiêu phân vùng làm một phần của quy tắc xây dựng. - Hỗ trợ thông thường.
custom_images
không thể được tạo bằng hệ thống xây dựng Soong. - Hỗ trợ cập nhật qua mạng không dây.
custom_images
được dùng làm ROM gốc các hình ảnh 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à một phần mở rộng của
Phân vùng system
. Có một ABI yếu giữa
Phân vùng product
và system
, vì vậy cả hai đều phải
được nâng cấp cùng 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 mọi nền tảng API từ product
đến
system
, OEM phải duy trì ABI riêng trong khoảng
hai phân vùng.
Phân vùng product
và system
có thể có
phụ thuộc lẫn nhau. Tuy nhiên, việc kiểm thử với
Hình ảnh hệ thống chung (GSI)
phải hoạt động bình thường mà không có phân vùng product
.
Khi thực thi giao diện product
, product
phân vùng được tách riêng với phân vùng system
. product
phân vùng 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
. Tương tác trực tiếp giữa
Phân vùng product
và vendor
bị cấm.
(Hành động này được thực thi theo chính sách SEpolicy.)
Triển khai phân vùng sản phẩm
Trước khi triển khai phân vùng sản phẩm mới, hãy xem lại
có liên quan
các thay đổi đối với phân vùng sản phẩm trong AOSP (Dự án nguồn mở Android). Sau đó, để thiết lập product
,
bao gồm các cờ bảng hoặc 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 trường 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ờ bản dựng sau đây để cài đặt mộ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 không cho phân vùng product
bị can thiệp
phần mềm độc hại, bật
Android
Xác minh quy trình khởi động (AVB) cho phân vùng đó (giống như cách bạn làm với
phân vùng vendor
và system
). Cách bật AVB:
bao gồm các cờ bản dựng sau:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.