Phân vùng sản phẩm

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
  • Không thể cập nhật; thường lóe lên một lần tại nhà máy.
  • Được xây dựng dựa trên các biến thể nhỏ, chẳng hạn như thương hiệu và màu sắc. Có nội dung phân vùng oem khác nhau không có nghĩa là phần mềm sản phẩm khác nhau.
  • Phân vùng system không phụ thuộc vào phân vùng oem . (Nó chỉ sử dụng phân vùng oem khi tìm thấy một tệp cụ thể ở đó).
  • Chỉ sử dụng API công khai trên phân vùng system .
product
  • Có thể cập nhật
  • Kết hợp với hình ảnh hệ thống (chúng cập nhật cùng nhau)
  • Được xây dựng cho mỗi sản phẩm hoặc dòng sản phẩm.
  • Phân vùng hệ thống có thể phụ thuộc vào phân vùng product .
  • Có thể sử dụng API không công khai vì chúng được cập nhật đồng thời.
product (giao diện bắt buộc)
  • Có thể cập nhật
  • Tách rời với hình ảnh hệ thống.
  • Được xây dựng cho mỗi sản phẩm hoặc dòng sản phẩm.
  • Phân vùng system không phụ thuộc vào phân vùng product .
  • Không thể sử dụng API ẩn mà chỉ sử dụng API công khai và API hệ thống trên phân vùng system .

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/*/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 productsystem , 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 productsystem 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 productsystem 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ư trong PRODUCT_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 trong Android.bp
  • LOCAL_PRODUCT_MODULE := true trong Android.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 systemvendor ). Để bật AVB, hãy bao gồm các cờ xây dựng sau: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .