Phân chia sản phẩm

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
  • Không thể cập nhật; thường được cài đặt ROM một lần tại nhà máy.
  • Được tạo theo các biến thể nhỏ, chẳng hạn như thương hiệu và màu sắc. Có được nội dung khác nhau trong phân vùng oem không có nghĩa là sản phẩm phần mềm khác nhau.
  • Phân vùng system không phụ thuộc vào phân vùng oem. (Công cụ này sử dụng oem chỉ 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
  • Đi kèm với hình ảnh hệ thống (chúng cập nhật cùng nhau)
  • Được tạo theo 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 các API không công khai vì chúng được cập nhật đồng thời.
product (giao diện thực thi)
  • Có thể cập nhật
  • Đã tách riêng với hình ảnh hệ thống.
  • Được tạo theo sản phẩm hoặc dòng sản phẩm.
  • Phân vùng system không phụ thuộc vào product phân vùng.
  • 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 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/*/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 productsystem, 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 productsystem 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 productvendor 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ư 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ờ bản dựng sau đây để cài đặt mộ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 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 vendorsystem). Cách bật AVB: bao gồm các cờ bản dựng sau: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.