Thiết kế tổng quan nhanh VNDK

Hình ảnh hệ thống có thể sử dụng ảnh chụp nhanh của VNDK để cung cấp đúng VNDK thư viện đến hình ảnh của nhà cung cấp ngay cả khi hình ảnh hệ thống và nhà cung cấp được tạo từ các phiên bản Android khác nhau. Việc tạo ảnh chụp nhanh VNDK cần chụp Các thư viện VNDK như một phần tổng quan nhanh và đánh dấu các thư viện này bằng số phiên bản. Chiến lược phát hành đĩa đơ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 ả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 Ổn định theo ABI.

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

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 biệt cho các phân vùng của hệ thống và nhà cung cấp. VNDK xác định các tập hợp thư viện (VNDK-core, VNDK-SP và LL-NDK) mà mã nhà cung cấp có thể liên kết và ngăn chặn nhà cung cấp sử dụng các thư viện không thuộc VNDK thiết lập. Do đó, hình ảnh nhà cung cấp có thể được xây dựng và chạy nếu VNDK thích hợp các nhóm trên ảnh hệ thống được cung cấp cho ảnh nhà cung cấp.

lõi VNDK

Bộ thư viện VNDK-core được cài đặt trong /system/lib[64]/vndk-${VER} và có sẵn 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 của hệ thống có thể không sử dụng các thư viện này và phải thay vào đó, hãy sử dụng các thư viện được cài đặt trong /system/lib[64]. Bởi vì về hạn chế không gian tên nghiêm ngặt cho mỗi quy trình, thư viện VNDK-core đều an toàn với khả năng tải kép.

Để đưa một thư viện vào VNDK-core, hãy thêm đoạn mã 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à sẵn có cho các quy trình và quy trình hệ thống của nhà cung cấp (thông qua SP-HAL thư viện được cài đặt trong phân vùng nhà cung cấp). Thư viện VNDK-SP có thể tải kép.

Để đưa một thư viện vào VNDK-SP, hãy thêm đoạn mã 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]. Mô-đun nhà cung cấp có thể dùng các thư viện mã giả lập LL-NDK để truy cập vào các ký hiệu được chọn trước của LL-NDK thư viện. Thư viện LL-NDK phải có khả năng tương thích ngược và ổn định với ABI cho phép phiên bản cũ của các mô-đun nhà cung cấp sử dụng phiên bản mới của thư viện LL-NDK. Do các đặc điểm ổn định trên ABI của LL-NDK, ảnh chụp nhanh VNDK không cần thêm thư viện LL-NDK cho hình ảnh cũ của nhà cung cấp.

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

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

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

Vì các thư viện tổng quan nhanh của VNDK có thể khác nhau đối với từng phiên bản VNDK, nên ảnh chụp nhanh 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à nhà cung cấp hình ảnh

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

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

Phải bao gồm tệp cấu hình không gian tên trình liên kết và ảnh chụp nhanh VNDK 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 trình liên kết được định cấu hình tự động để tìm 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

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

Kiến trúc của VNDK

Để giúp ảnh hệ thống Android 9 tương thích với Ảnh nhà cung cấp Android 8.1, ảnh chụp nhanh VNDK phù hợp với Android 8.1 hình ảnh nhà cung cấp phải được cung cấp cùng với Android 9 hình ảnh hệ thống, như minh hoạ dưới đây:

Hình 2. Kiến trúc tổng quan nhanh VNDK

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

  • Tạo thông tin tổng quan nhanh về VNDK-core và VNDK-SP thư viện. Android 9 có một tập lệnh mà bạn có thể 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 nhóm tất cả các thư viện trong /system/lib[64]/vndk-28/system/lib[64]/vndk-sp-28 được tạo bằng dòng dữ liệu nguồn dưới dạng ảnh chụp nhanh của VNDK, trong đó 28 là phiên bản VNDK của Android 9. Thông tin tổng quan nhanh cũng bao gồm trình liên kết tệp cấu hình không gian tên /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt/etc/vndksp.libraries.28.txt. Thông tin tổng quan nhanh đã tạo sẽ được sử dụng bằng 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 dựng sẵn từ tóm tắt. Trong Android 9, ảnh chụp nhanh VNDK đã một nhóm thư viện VNDK-core dựng sẵn và một bộ thư viện VNDK-SP cũng như dưới dạng tệp cấu hình không gian tên trình liên kết. Trường hợp bạn cung cấp danh sách VNDK các phiên bản tổng quan nhanh được cài đặt, tại thời điểm xây dựng, cài đặt hình ảnh hệ thống các thư viện tổng quan nhanh VNDK vào /system/lib[64]/vndk-${VER} và các thư mục /system/lib[64]/vndk-sp-${VER} và trình liên kết tệp cấu hình không gian tên cho các ảnh chụp nhanh VNDK đó để Thư mục /etc.

Tạo 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 (có nghĩa 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 phát hành. Phiên bản VNDK mà phân vùng nhà cung cấp sử dụng sẽ được lưu trữ tự động trong thuộc tính ro.vndk.version. Thuộc tính này có thể được đọc 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 đối với một số thư viện và xác định phiên bản tổng quan nhanh VNDK cho không gian tên .

Xây dựng 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à không gian tên tệp cấu hình. Nếu bạn đặt BOARD_VNDK_VERSION := current, các thư viện này đượ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ừ bản tổng quan nhanh, nên các thư viện VNDK đã cài đặt không ổn định với ABI. Tuy nhiên, khi phiên bản Android được phát hành, ABI cho phiên bản VNDK hiện tại đã được khắc phục. Tại thời điểm này, bất kỳ Lỗi ABI là một lỗi bản dựng nên các bản vá cho phiên bản Android không được thay đổi ABI cho thư viện VNDK.