Phân chia sản phẩm

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
  • Không cập nhật được; thường được cài đặt ROM một lần tại nhà máy.
  • Được tạo cho từng biến thể nhỏ, chẳng hạn như thương hiệu và màu sắc. Việ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. (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
  • Cùng với hình ảnh hệ thống (chúng cập nhật cùng nhau)
  • Được tạo cho từng sản phẩm hoặc họ 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 các API không công khai vì các API này được cập nhật đồng thời.
product (giao diện được thực thi)
  • Có thể cập nhật
  • Đã tách khỏi hình ảnh hệ thống.
  • Được tạo cho từng sản phẩm hoặc họ 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, nhưng 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ì 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/*/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 productsystem, 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 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 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 productvendor. (Đ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ư 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ác cờ bản 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

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 vendorsystem). Để bật AVB, hãy thêm các cờ bản dựng sau: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.