Android 9 trở lên bao gồm hỗ trợ xây dựng 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 khỏi phân vùng system
sang phân vùng của vendor
mà không dành không gian cho các thành phần dành riêng cho OEM được xây dựng từ hệ thống xây dựng Android. Android 9 trở lên cung cấp các quyền bổ sung 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 các phân vùng khác nhau.
Về phân vùng sản phẩm
Nhiều OEM tùy 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à cung cấp dịch vụ. Tuy nhiên, những tùy chỉnh như vậy khiến không thể sử dụng một ảnh hệ thống duy nhất cho nhiều SKU phần mềm. Mỗi hình ảnh phải khác nhau để hỗ trợ các tùy chỉnh, chẳng hạn như với các ngôn ngữ hoặc nhà cung cấp dịch vụ khác nhau. Việc sử dụng một phân vùng product
riêng biệt để chứa các tùy chỉnh giúp có thể sử dụng một hình ảnh hệ thống duy nhất 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 của vendor
tiếp tục lưu trữ mã BSP dành riêng cho SoC. Mã này 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ư quản lý dung lượng ổ đĩa (một lượng không gian hạn chế phải được dành riêng cho việc phát triển 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 phân vùng product
, hãy dành thời gian xem xét việc triển khai AOSP duy nhất của bạn và các chiến thuật giảm thiểu khả thi (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) , việc này không phải do Google thực hiện mà do một số OEM thực hiện ). Phân vùng động sẽ là giải pháp tốt cho việc này.
Phân vùng và quyền của sản phẩm
Trong 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 riêng tư trên phân vùng `sản phẩm` của mình. Tệp permissions.xml
phải nằm trong cùng phân vùng với ứng dụng riêng tư. Việc đặt tệp permissions.xml
vào phân vùng system
cho các ứng dụng riêng tư không mở rộng các quyền đó cho các ứng dụng riêng tư trong phân vùng product
, mặc dù cái trước là phần mở rộng của cái sau. Để biết chi tiết về các quyền và quy trình đưa vào danh sách trắng, hãy xem Danh sách cho phép cấp phép đặc quyền .
Kế thừa /oem so với /sản phẩm
Chúng tôi có hai loại thuộc tính của phân vùng product
tùy thuộc vào việc thực thi giao diện sản phẩm . Ngoài ra, phân vùng product
khác với phân vùng oem
cũ:
Vách ngăn | Thuộc tính |
---|---|
oem |
|
product |
|
product (giao diện bắt buộc) |
|
Vì những lý do này, Android 9 hỗ trợ phân vùng product
trong khi vẫn duy trì hỗ trợ cho 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 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 Android Framework dành riêng cho sản phẩm (
/product/etc/sysconfig/*
và/product/etc/permissions/*
) - Các tệp phương tiệ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ể sử dụng custom_images
. Họ thiếu sự hỗ trợ cho những điều sau:
- Cài đặt các mô-đun vào một mục tiêu cụ thể .
custom_images
hỗ trợ sao chép các tạo phẩm vào 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 đích của nó như một phần của quy tắc xây dựng. - Sẽ ủng hộ . Không thể tạo
custom_images
bằng hệ thống xây dựng Soong. - Hỗ trợ cập nhật OTA .
custom_images
được sử dụng làm ả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ó 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 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 bề mặt 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 thử nghiệm với Hình ảnh hệ thống chung (GSI) phải hoạt động bình thường 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 rời 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ỳ sự 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 product
và phân vùng vendor
bị cấm. (Điều này được thực thi bởi SEpolicy.)
Thực hiện 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ác thay đổi về phân vùng sản phẩm liên quan trong AOSP . Sau đó, để thiết lập product
, hãy bao gồm các cờ bảng hoặc cờ xây 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ờ xây 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
Kích hoạt khởi động đã được xác minh
Để ngăn phân vùng product
bị phần mềm độc hại giả mạo, hãy bật Khởi động được xác minh Android (AVB) cho phân vùng đó (giống như bạn thực hiện đối với phân vùng system
và vendor
). Để bật AVB, hãy bao gồm các cờ xây dựng sau: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.