VNDK Thiết kế Ảnh chụp nhanh

Ảnh chụp nhanh VNĐK có thể được sử dụng bởi hình ảnh hệ thống để cung cấp thư viện VNĐK chính xác cho hình ảnh nhà cung cấp ngay cả khi hình ảnh hệ thống và nhà cung cấp được xây dựng từ các phiên bản Android khác nhau. Tạo ảnh chụp nhanh VNĐK yêu cầu chụp các thư viện VNĐK dưới dạng ảnh chụp nhanh và đánh dấu chúng 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 VNĐK cụ thể cung cấp ABI cần thiết 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 VNĐK, các thư viện VNĐK phải ổn định với ABI .

Thiết kế ảnh chụp nhanh VNĐK bao gồm các phương pháp tạo bản dựng sẵn của ảnh chụp nhanh VNĐK từ hình ảnh hệ thống hiện tại và cài đặt các lib dựng 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 VNĐK

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 hệ thống và nhà cung cấp. VNDK xác định các bộ thư viện (VNK-core, VNDK-SP và LL-NDK) mà mã 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 bộ VNDK. Do đó, hình ảnh nhà cung cấp có thể được xây dựng và chạy nếu bộ VNĐK thích hợp trên hình ảnh hệ thống được cung cấp cho hình ảnh nhà cung cấp.

lõi VNĐK

Bộ thư viện lõi VNĐK được cài đặt trong /system/lib[64]/vndk-${VER}chỉ khả dụng 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 có thể không sử dụng các thư viện này và thay vào đó phải sử dụng các thư viện được cài đặt trong /system/lib[64] . Do giới hạn không gian tên nghiêm ngặt cho mỗi quy trình, các thư viện lõi VNĐK an toàn không bị tải kép.

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

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

VNĐK-SP

Thư viện VNDK-SP được cài đặt trong /system/lib[64]/vndk-sp-${VER} và có sẵn cho các tiến trình của nhà cung cấp và các tiến 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 kép.

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

Giới thiệu về ảnh chụp nhanh của VNĐK

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

Bắt đầu 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 thư mục VNDK-core và VNDK-SP cho các phiên bản cũ hơn trong mã nguồn Android. Tại thời điểm xây dựng, các ảnh chụp nhanh cần thiết sẽ được cài đặt vào /system/lib[64]/vndk-${VER}/system/lib[64]/vndk-sp-${VER} (các thư mục mà nhà cung cấp có thể sử dụng phân vù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 VNĐK có thể khác nhau đối với mỗi phiên bản VNĐK, nên ảnh chụp nhanh VNĐK cũng bao gồm các cấu hình không gian tên liên kết, được cài đặt dưới dạng etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt , và /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 chụp ảnh nhanh; build mà không cần cấu hình bổ sung cho ảnh chụp nhanh VNĐK.

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 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 cấu hình tự động để tìm kiếm thư viện VNĐK 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 hình ảnh nhà cung cấp nhỏ

Việc xây dựng hình ảnh nhà cung cấp dựa trên ảnh chụp nhanh VNDK chưa được hỗ trợ nên bạn phải xây dựng 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ư mô tả trong ví dụ trước.

Kiến trúc ảnh chụp nhanh của VNDK

Để làm cho hình ảnh hệ thống Android 9 tương thích với hình ảnh nhà cung cấp Android 8.1, ảnh chụp nhanh VNDK phù hợp với hình ảnh nhà cung cấp Android 8.1 phải được cung cấp cùng với hình ảnh hệ thống Android 9, như hiển thị bên dưới:

Hình 2. Kiến trúc snapshot của VNDK

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

  • Tạo snapshot cho thư viện VNĐK-core và VNĐK-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 bản dựng VNĐK hiện tại. Tập lệnh này gói tất cả các thư viện trong /system/lib[64]/vndk-28/system/lib[64]/vndk-sp-28 được xây dựng với nguồn hiện tại dưới dạng ảnh chụp nhanh VNĐK, trong đó 28 là phiên bản VNĐK 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 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 VNĐK-core và VNĐK-SP dựng sẵn từ ảnh chụp nhanh . Trong Android 9, ảnh chụp nhanh VNDK có một bộ thư viện lõi VNDK được tạo sẵn và một bộ thư viện VNDK-SP, cũng như các tệp cấu hình không gian tên của trình liên kết. Khi bạn cung cấp danh sách các phiên bản snapshot của VNĐK sẽ được cài đặt, tại thời điểm build, image hệ thống sẽ cài đặt các thư viện snapshot của VNĐK vào /system/lib[64]/vndk-${VER}/system/lib[64]/vndk-sp-${VER} thư mục và các tệp cấu hình không gian tên liên kết cho các ảnh chụp nhanh VNĐK tới thư mục /etc .

Phiên bản VNĐK

Mỗi bản Android chỉ có một snapshot VNĐK và phiên bản SDK được dùng làm phiên bản VNĐK (nghĩa là phiên bản VNĐK có số nguyên, chẳng hạn như 27 đối với Android 8.1). Phiên bản VNĐK được khắc phục khi có phiên bản Android. Phiên bản VNDK được 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 , có thể đọc được trong thời gian chạy. Phiên bản này sau đó được sử dụng để xác định phiên bản VNĐK của nhà cung cấp cho một số thư viện và xác định phiên bản chụp nhanh VNĐK cho cấu hình không gian tên.

Xây dựng thư viện VNĐK

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

Vì bản dựng này không cài đặt thư viện VNĐK từ ảnh chụp nhanh nên các thư viện VNĐK được cài đặt không ổn định ABI. Tuy nhiên khi ra phiên bản Android thì ABI của phiên bản VNĐK hiện tại đã được sửa. Tại thời điểm này, bất kỳ sự cố ABI nào đều là lỗi xây dựng nên các bản vá lỗi cho phiên bản Android không được thay đổi ABI cho thư viện VNĐK.