Cấp độ API nhà cung cấp

Cấp độ API nhà cung cấp đề cập đến phiên bản giao diện mà phân vùng nhà cung cấp hỗ trợ. Giao diện này là hai chiều; mô tả API mà phân vùng nhà cung cấp cung cấp cho phân vùng hệ thống (lớp trừu tượng phần cứng hoặc giao diện HAL) và cũng là API mà phân vùng nhà cung cấp yêu cầu từ phân vùng hệ thống (bộ công cụ dành cho nhà phát triển gốc cấp thấp hoặc giao diện LLNDK).

Cấp độ API của nhà cung cấp cũng được dùng để xác định Yêu cầu về phần mềm của nhà cung cấp (VSR). Đây là một tập hợp các yêu cầu về chức năng và không chức năng mà phần mềm trong phân vùng của nhà cung cấp phải đáp ứng.

Phần còn lại của trang này giải thích cách sử dụng các thuộc tính hệ thống, tuỳ thuộc vào phiên bản Android của bạn, để xác định cấp độ API của nhà cung cấp.

Đóng băng nhà cung cấp

Android cho phép nhà cung cấp cố định phân vùng nhà cung cấp ở một phiên bản VSR cụ thể. Tập hợp các tính năng mà Android mong đợi từ phân vùng nhà cung cấp được xác định theo cấp độ API của nhà cung cấp liên kết với phân vùng nhà cung cấp. Trong thời gian chạy, hành vi của phần mềm đang chạy trong phân vùng hệ thống sẽ điều chỉnh để phù hợp với cấp độ API của nhà cung cấp trong phân vùng nhà cung cấp. Ví dụ: phần mềm trong phân vùng hệ thống có thể không thực thi các tính năng mới nếu chúng không được cấp API của phân vùng nhà cung cấp hỗ trợ.

Bạn chỉ có thể sử dụng tính năng khoá nhà cung cấp nếu đang tạo thiết bị tương thích với Android.

Xác định cấp độ API của nhà cung cấp (Android 14-QPR3 trở lên)

Đối với Android 14-QPR3 trở lên, cấp độ API của nhà cung cấp được phát hành riêng biệt, nghĩa là cấp độ API SDK và cấp độ API của nhà cung cấp không đồng bộ.

Do lịch phát hành riêng biệt, đối với Android 14-QPR3 trở lên, cấp độ API của nhà cung cấp được tách hoàn toàn khỏi cấp độ API SDK. Để đảm bảo việc phân tách này rõ ràng, định dạng của cấp độ API của nhà cung cấp là một ngày được định dạng là YYYYMM (năm và tháng) trong khi cấp độ SDK là một số nguyên.

Android 14-QPR3 trở lên chứa các thuộc tính hệ thống sau đây liên quan đến cấp độ API của nhà cung cấp (ro.vendor.api_level):

Thuộc tính hệ thống Định dạng Mô tả Chế độ cài đặt ban đầu
ro.board.api_level YYYYMM Cấp độ API của nhà cung cấp mà phần mềm của bộ vi mạch hỗ trợ. Thuộc tính này được đặt cho tất cả khối. Hệ thống xây dựng sẽ tự động đặt giá trị này.
ro.board.first_api_level YYYYMM Cấp độ API của nhà cung cấp mà phần mềm của bộ vi mạch được phát hành lần đầu tiên. Thuộc tính này chỉ là một chức năng của bộ vi mạch và do các nhà cung cấp bộ xử lý SoC thiết lập nếu bộ vi mạch này đủ điều kiện để đóng băng thông qua nhà cung cấp. Sau khi thiết lập ban đầu, bạn không được sửa đổi giá trị này. Nhà cung cấp SoC thiết lập chế độ cài đặt này bằng BOARD_SHIPPING_API_LEVEL.
ro.product.first_api_level Số nguyên Cấp độ API SDK mà thiết bị khởi chạy ban đầu. Thuộc tính này do nhà sản xuất thiết bị gốc (OEM) đặt và sau đó không bao giờ được cập nhật, ngay cả sau khi nâng cấp hệ điều hành.
ro.vendor.api_level YYYYMM Cấp độ API của nhà cung cấp mà toàn bộ thiết bị phải tuân thủ. Được mô tả sau bảng này.
ro.board.api_frozen boolean Thuộc tính này được đặt thành true nếu cấp độ API của nhà cung cấp mà ro.board.api_level đại diện đã được hoàn tất. Nếu bạn không đặt thuộc tính này, thuộc tính này sẽ mặc định là false.
ro.llndk.api_level YYYYMM Cấp độ API của nhà cung cấp ở định dạng YYYYMM mà LLNDK hiện tại trong phân vùng hệ thống cung cấp. LLNDK có khả năng tương thích ngược, vì vậy, mọi hình ảnh của nhà cung cấp nhỏ hơn hoặc bằng cấp độ API này đều có thể được cài đặt ROM bằng hình ảnh hệ thống này. Thuộc tính này do phân vùng hệ thống đặt.

Thuộc tính ro.vendor.api_level được lấy theo một trong hai cách sau:

  • Nếu chipset đủ điều kiện để nhà cung cấp đóng băng:

    ro.vendor.api_level = min(
      ro.board.api_level,
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level))
    
  • Nếu chipset không bị nhà cung cấp đóng băng:

    ro.vendor.api_level =
      AVendorSupport_getVendorApiLevelOf(ro.product.first_api_level)
    

Phương thức AVendorSupport_getVendorApiLevelOf() xác định cấp độ API nhà cung cấp tương ứng từ cấp độ API SDK. Ví dụ: AVendorSupport_getVendorApiLevelOf(35), trong đó 35 là cấp độ API SDK của bản phát hành Android chính vào năm 2024 sẽ trả về 202404, đây là ngày sơ bộ của Android 14-QPR3 khi cấp độ API Nhà cung cấp hiện tại được thiết lập.

Xác định cấp độ API của nhà cung cấp (Android 13)

Cấp độ API của nhà cung cấp tuân theo cấp độ API SDK dành cho giao diện ứng dụng-hệ điều hành và được cập nhật một lần mỗi năm khi nền tảng Android mới được phát hành cho AOSP.

Android 13 chứa các thuộc tính hệ thống sau đây liên quan đến cấp độ API của nhà cung cấp (ro.vendor.api_level):

Thuộc tính hệ thống Định dạng Mô tả Chế độ cài đặt ban đầu
ro.board.first_api_level Số nguyên Cấp độ API của nhà cung cấp mà phần mềm của một chipset được phát hành lần đầu tiên. Đây là chức năng chỉ của bộ vi mạch và không thể sửa đổi bằng nhà cung cấp SoC hoặc OEM (Nhà sản xuất thiết bị gốc). Thuộc tính này chỉ được đặt cho các chipset đủ điều kiện để nhà cung cấp đóng băng Giá trị được thiết lập bằng cách đặt BOARD_SHIPPING_API_LEVEL trong tệp device.mk.
ro.board.api_level Số nguyên Cấp độ API của nhà cung cấp mà phần mềm của một chipset hỗ trợ. Thuộc tính này chỉ được đặt cho các chipset đủ điều kiện để nhà cung cấp đóng băng. Thuộc tính này được đặt cho tất cả khối. Ban đầu, hệ thống xây dựng đặt giá trị của thuộc tính này thành giá trị giống với ro.board.first_api_level, nhưng có thể cập nhật nếu phân vùng của nhà cung cấp được nâng cấp.
ro.product.first_api_level Số nguyên Cấp độ API SDK mà thiết bị khởi chạy ban đầu. Thuộc tính này do nhà sản xuất thiết bị gốc (OEM) đặt và sau đó không bao giờ được cập nhật, ngay cả sau khi nâng cấp hệ điều hành.
ro.vendor.api_level Số nguyên Cấp độ API của nhà cung cấp mà toàn bộ thiết bị phải tuân thủ. Được mô tả sau bảng này.
ro.vndk.version Số nguyên Phiên bản VNDK mà phân vùng nhà cung cấp được xây dựng dựa trên. Thuộc tính này do phân vùng hệ thống đặt.
ro.vendor.build.version.sdk Số nguyên Cấp độ API SDK của cây nguồn nơi phân vùng nhà cung cấp được tạo.
ro.vendor.build.version.release Số nguyên Phiên bản nền tảng của cây nguồn nơi phân vùng nhà cung cấp được tạo.
ro.vendor.build.version.release_or_codename Số nguyên Tên mã của cây nguồn nơi tạo phân vùng nhà cung cấp.

Thuộc tính ro.vendor.api_level được tự động đặt thành giá trị tối thiểu là ro.board.api_level (hoặc ro.board.first_api_level nếu không xác định ro.board.api_level) và ro.product.first_api_level.