Thiết kế tổng quan nhanh VNDK

Hình ảnh hệ thống có thể sử dụng ảnh chụp nhanh VNDK để cung cấp thư viện VNDK chính xác cho hình ảnh nhà cung cấp ngay cả khi hình ảnh hệ thống và hình ảnh nhà cung cấp được tạo từ các phiên bản Android khác nhau. Để tạo ảnh chụp nhanh VNDK, bạn cần chụp các thư viện VNDK dưới dạng ảnh chụp nhanh và đánh dấu các thư viện đó bằng số phiên bản. Hình ảnh nhà cung cấp có thể liên kết với một phiên bản VNDK cụ thể cung cấp các ABI bắt buộc cho các mô-đun trong hình ảnh nhà cung cấp. Tuy nhiên, trong cùng một phiên bản VNDK, các thư viện VNDK phải là ABI-stable (ABI ổn định).

Thiết kế ảnh chụp nhanh VNDK bao gồm các phương thức để tạo bản dựng trước của ảnh chụp nhanh VNDK từ ảnh hệ thống hiện tại và cài đặt các thư viện tạo sẵn đó vào phân vùng hệ thống của phiên bản Android mới hơn.

Giới thiệu về thư viện VNDK

HIDL-HAL, được giới thiệu trong Android 8.0, cho phép nâng cấp riêng cho các phân vùng hệ thống và nhà cung cấp. VNDK xác định các nhóm thư viện (VNDK-core, VNDK-SP và LL-NDK) mà mã của nhà cung cấp có thể liên kết và chặn nhà cung cấp sử dụng các thư viện không có trong nhóm VNDK. Do đó, bạn có thể tạo và chạy hình ảnh nhà cung cấp nếu các nhóm VNDK thích hợp trên hình ảnh hệ thống được cung cấp cho hình ảnh nhà cung cấp.

VNDK-core

Bộ thư viện VNDK-core được cài đặt trong /system/lib[64]/vndk-${VER}chỉ dành cho các quy trình của nhà cung cấp có cấp độ API bằng ${VER}. Các quy trình hệ thống không được sử dụng các thư viện này và phải sử dụng các thư viện được cài đặt trong /system/lib[64]. Do quy định hạn chế nghiêm ngặt về không gian tên cho mỗi quy trình, các thư viện VNDK-core sẽ an toàn trước việc tải kép.

Để đưa một thư viện vào VNDK-core, hãy thêm nội dung sau vào Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Thư viện VNDK-SP được cài đặt trong /system/lib[64]/vndk-sp-${VER} và có sẵn cho các quy trình của nhà cung cấp cũng như các quy trình hệ thống (thông qua các thư viện SP-HAL được cài đặt trong phân vùng của nhà cung cấp). Thư viện VNDK-SP có thể được tải song song.

Để đưa một thư viện vào VNDK-SP, hãy thêm nội dung sau vào Android.bp:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Thư viện LL-NDK được cài đặt trong /system/lib[64]. Các mô-đun của nhà cung cấp có thể sử dụng thư viện mô phỏng LL-NDK để truy cập vào các biểu tượng được chọn trước của thư viện LL-NDK. Thư viện LL-NDK phải tương thích ngược và ổn định về ABI để cho phép các phiên bản cũ của mô-đun nhà cung cấp sử dụng các phiên bản mới của thư viện LL-NDK. Do các đặc điểm ổn định về ABI của LL-NDK, bản lưu toàn cảnh VNDK không cần bao gồm các thư viện LL-NDK cho hình ảnh nhà cung cấp cũ.

Giới thiệu về ảnh chụp nhanh VNDK

Android 8.1 bao gồm các thư viện VNDK được tạo từ mã nguồn. Tuy nhiên, đối với các phiên bản Android mới hơn, bạn phải chụp mỗi phiên bản VNDK dưới dạng ảnh chụp nhanh và cung cấp dưới dạng bản dựng trước để cho phép liên kết đến hình ảnh nhà cung cấp cũ.

Kể từ Android 9, các phiên bản Android mới sẽ bao gồm ít nhất một ảnh chụp nhanh của thư mục VNDK-core và VNDK-SP cho các phiên bản cũ trong mã nguồn Android. Tại thời điểm tạo bản dựng, các ảnh chụp nhanh bắt buộc sẽ được cài đặt vào /system/lib[64]/vndk-${VER}/system/lib[64]/vndk-sp-${VER} (các thư mục mà phân vùng của nhà cung cấp có thể sử dụng), trong đó ${VER} là biến chuỗi đại diện cho tên phiên bản của ảnh chụp nhanh VNDK.

Vì các thư viện ảnh chụp nhanh VNDK có thể khác nhau tuỳ theo phiên bản VNDK, nên ảnh chụp nhanh VNDK cũng bao gồm các cấu hình không gian tên trình liên kết, được cài đặt dưới dạng etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt/etc/vndksp.libraries.${VER}.txt.

Ví dụ: Nâng cấp hệ thống và hình ảnh nhà cung cấp

Không cần ảnh chụp nhanh; tạo bản dựng mà không cần cấu hình bổ sung cho ảnh chụp nhanh VNDK.

Ví dụ: Chỉ nâng cấp hình ảnh hệ thống

Phải bao gồm ảnh chụp nhanh VNDK và tệp cấu hình không gian tên trình liên kết cho hình ảnh nhà cung cấp trong hình ảnh hệ thống. Các tệp cấu hình không gian tên của trình liên kết được tự động định cấu hình để tìm kiếm các thư viện VNDK trong /system/lib[64]/vndk-${VER}/system/lib[64]/vndk-sp-${VER}.

Hình 1. Chỉ nâng cấp hệ thống

Ví dụ: Nâng cấp hình ảnh hệ thống, thay đổi nhỏ về hình ảnh của nhà cung cấp

Việc tạo hình ảnh nhà cung cấp dựa trên ảnh chụp nhanh VNDK chưa được hỗ trợ, vì vậy, bạn phải tạo hình ảnh nhà cung cấp riêng biệt bằng mã nguồn ban đầu, sau đó nâng cấp hình ảnh hệ thống như mô tả trong ví dụ trước.

Cấu trúc ảnh chụp nhanh VNDK

Để hình ảnh hệ thống Android 9 tương thích với hình ảnh nhà cung cấp Android 8.1, bạn phải cung cấp ảnh chụp nhanh VNDK khớp với hình ảnh nhà cung cấp Android 8.1 cùng với hình ảnh hệ thống Android 9, như minh hoạ bên dưới:

Hình 2. Cấu trúc ảnh chụp nhanh VNDK

Thiết kế ảnh chụp nhanh VNDK bao gồm các phương thức sau:

  • Tạo ảnh chụp nhanh cho thư viện VNDK-core và VNDK-SP. Android 9 bao gồm một tập lệnh mà bạn có thể sử dụng để tạo ảnh chụp nhanh của bản dựng VNDK hiện tại. Tập lệnh này gói tất cả thư viện trong /system/lib[64]/vndk-28/system/lib[64]/vndk-sp-28 được tạo bằng nguồn hiện tại dưới dạng ảnh chụp nhanh VNDK, trong đó 28 là phiên bản VNDK của Android 9. Ảnh chụp nhanh cũng bao gồm các tệp cấu hình không gian tên của trình liên kết /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt/etc/vndksp.libraries.28.txt. Ảnh chụp nhanh được tạo sẽ được sử dụng với các phiên bản Android mới hơn (cao hơn Android 9).
  • Cài đặt thư viện VNDK-core và VNDK-SP tạo sẵn từ ảnh chụp nhanh. Trong Android 9, ảnh chụp nhanh VNDK có một tập hợp các thư viện VNDK-core tạo sẵn và một tập hợp các thư viện VNDK-SP, cũng như các tệp cấu hình không gian tên trình liên kết. Khi bạn cung cấp danh sách các phiên bản ảnh chụp nhanh VNDK cần cài đặt, tại thời điểm tạo bản dựng, ảnh hệ thống sẽ cài đặt các thư viện ảnh chụp nhanh VNDK vào /system/lib[64]/vndk-${VER} và các thư mục /system/lib[64]/vndk-sp-${VER} cũng như tệp cấu hình không gian tên của trình liên kết cho các ảnh chụp nhanh VNDK đó vào thư mục /etc.

Phiên bản VNDK

Mỗi bản phát hành Android chỉ có một ảnh chụp nhanh VNDK và phiên bản SDK được dùng làm phiên bản VNDK (tức là phiên bản VNDK có một số nguyên, chẳng hạn như 27 cho Android 8.1). Phiên bản VNDK được khắc phục khi phiên bản Android được phát hành. Phiên bản VNDK mà phân vùng nhà cung cấp sử dụng được lưu trữ tự động trong thuộc tính ro.vndk.version. Bạn có thể đọc thuộc tính này trong thời gian chạy. Sau đó, phiên bản này được dùng để xác định phiên bản VNDK của nhà cung cấp cho một số thư viện và xác định phiên bản tổng quan nhanh VNDK cho cấu hình không gian tên.

Tạo thư viện VNDK

Lệnh make vndk tạo các thư viện có vndk: { enabled: true, … }, bao gồm cả các phần phụ thuộc và tệp cấu hình không gian tên. Nếu bạn đặt BOARD_VNDK_VERSION := current, các thư viện này sẽ được tạo bằng lệnh make.

Vì bản dựng này không cài đặt các thư viện VNDK từ ảnh chụp nhanh, nên các thư viện VNDK đã cài đặt không ổn định về ABI. Tuy nhiên, khi một phiên bản Android được phát hành, ABI cho phiên bản VNDK hiện tại sẽ được sửa. Tại thời điểm này, mọi lỗi ABI đều là lỗi bản dựng, vì vậy, các bản vá cho phiên bản Android không được thay đổi ABI cho thư viện VNDK.