Tạo ảnh chụp nhanh VNDK

Ảnh chụp nhanh VNDK là một tập hợp các thư viện VNDK-core và VNDK-SP cho một bản phát hành Android. Bạn chỉ có thể nâng cấp phân vùng hệ thống nếu system.img chứa ảnh chụp nhanh VNDK tương ứng mà vendor.img cần.

Ảnh chụp nhanh VNDK chính thức được tạo tự động trên máy chủ bản dựng Android và được kiểm tra vào /prebuilts/vndk của cây nguồn Android. Đối với mục đích phát triển, bạn có thể tạo ảnh chụp nhanh VNDK trên máy. Ảnh chụp nhanh VNDK được hỗ trợ cho các phiên bản TARGET_ARCH arm, arm64, x86 và x86_64.

Tạo ảnh chụp nhanh

Máy chủ bản dựng Android tạo các cấu phần phần mềm bản dựng và tệp tổng quan nhanh VNDK bằng các tham số bản dựng và lệnh bản dựng sau.

Thông số bản dựng

Tên mục tiêu bản dựng là vndk. Cấu hình mục tiêu bản dựng được hiển thị bên dưới.

TARGET_PRODUCT TARGET_ARCH TARGET_ARCH_VARIANT
aosp_arm arm armv7-a-neon
aosp_arm64 arm64 armv8-a
aosp_x86 x86 x86
aosp_x86_64 x86_64 x86_64
  • TARGET_PRODUCT=aosp_$(TARGET_ARCH)
  • TARGET_BUILD_VARIANT=user
  • TARGET_ARCH giống với cấu trúc mục tiêu của Hình ảnh hệ thống chung (GSI) (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT. Đối với ảnh chụp nhanh phiên bản 28 (Android 9) trở lên, bao gồm các cấu hình phổ biến được liệt kê ở trên.

Lệnh tạo bản dựng

Đối với ảnh chụp nhanh chính thức, Android 9 trở lên bao gồm một mục tiêu mẫu (vndk) trong vndk.mk. Mục tiêu này sẽ tạo và xuất ảnh chụp nhanh VNDK sang $DIST_DIR. Tệp ZIP tổng quan nhanh sử dụng định dạng android-vndk-$(TARGET_ARCH).zip. Ví dụ:

lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]

Máy chủ bản dựng Android sử dụng tập lệnh build.sh để tạo tất cả phiên bản kiến trúc được hỗ trợ bằng lệnh sau.

DIST_DIR=dist_dir development/vndk/snapshot/build.sh

Ảnh chụp nhanh VNDK cho một phiên bản Android được tạo từ nhánh phát hành của phiên bản đó.

Tạo bản dựng cục bộ

Trong quá trình phát triển, bạn có thể tạo ảnh chụp nhanh VNDK từ cây nguồn cục bộ bằng các lệnh sau.

  • Để tạo tất cả cấu trúc được hỗ trợ cùng một lúc, hãy thực thi tập lệnh bản dựng sau (build.sh).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
  • Để tạo một TARGET_ARCH cụ thể, hãy thực thi các lệnh sau.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist

Tệp android-vndk-$(TARGET_ARCH).zip tương ứng sẽ được tạo trong $DIST_DIR.

Tệp tổng quan

Ảnh chụp nhanh VNDK bao gồm các tệp sau.

  • Biến thể của nhà cung cấp cho thư viện dùng chung VNDK-core và VNDK-SP.
    • Bạn không cần thư viện dùng chung LL-NDK vì các thư viện này có khả năng tương thích ngược.
    • Đối với các mục tiêu 64 bit, cả thư viện TARGET_ARCHTARGET_2ND_ARCH đều được tạo và đưa vào.
  • Danh sách thư viện VNDK-core, VNDK-SP, LL-NDK và VNDK-private nằm ở [vndkcore|vndksp|llndk|vndkprivate].libraries.txt.
  • Tệp giấy phép.
  • module_paths.txt. Ghi lại đường dẫn mô-đun cho tất cả thư viện VNDK. Điều này cần thiết để kiểm tra xem các dự án GPL có nguồn được phát hành trong một cây nguồn Android nhất định hay không.

Đối với một tệp ZIP tổng quan nhanh VNDK nhất định, android-vndk-$(TARGET_ARCH).zip, các thư viện tạo sẵn VNDK được nhóm trong các thư mục riêng biệt có tên arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) theo số bit ABI. Ví dụ: đối với android-vndk-arm64.zip, các thư viện 64 bit được đặt trong arch-arm64-armv8-a và các thư viện 32 bit được đặt trong arch-arm-armv8-a. Ví dụ bên dưới cho thấy cấu trúc thư mục của tệp ZIP tổng quan nhanh VNDK arm64 (TARGET_ARCH=arm64) (android-vndk-arm64.zip).

Cấu trúc thư mục tổng quan nhanh VNDK
Hình 1. Cấu trúc thư mục tổng quan nhanh VNDK (ví dụ)

Bản dựng cho ảnh chụp nhanh của nhà cung cấp

Android 11 hỗ trợ ảnh chụp nhanh của nhà cung cấp, cho phép bạn tạo vendor.img bất kể phiên bản Android trên cây nguồn. Ảnh chụp nhanh VNDK mặc định chứa các tệp thư viện dùng chung (.so) có thể được cài đặt vào thiết bị, sau đó được liên kết từ các tệp nhị phân C++ của nhà cung cấp trong thời gian chạy. Để tạo dựa trên bản tổng quan nhanh VNDK đó, bạn cần có các cấu phần phần mềm bổ sung như tệp tiêu đề và cờ đã xuất.

Để tạo các cấu phần phần mềm như vậy (cùng với ảnh chụp nhanh VNDK) từ một cây nguồn cục bộ, hãy sử dụng lệnh sau.

VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh

Lệnh này tạo các tệp android-vndk-$(TARGET_ARCH).zip trong $DIST_DIR. Ví dụ bên dưới là tệp ZIP tổng quan nhanh VNDK arm64 có cấu phần phần mềm bản dựng. Các tệp in đậm là các tệp mới thêm vào ảnh chụp nhanh VNDK thông thường (như trong Hình 1) và bao gồm các tệp JSON (lưu trữ cflags của từng thư viện) và tất cả các tệp tiêu đề đã xuất.

android-vndk-arm64.zip
├── arch-arm64-armv8-a
│   └── shared
│       ├── vndk-core  -> *.so files, *.json files
│       └── vndk-sp    -> *.so files, *.json files
├── arch-arm-armv8-a   -> (same as arch-arm64-armv8-a)
├── configs            -> *.libraries.txt, module_paths.txt, module_names.txt
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files

Tải ảnh chụp nhanh VNDK lên

Ảnh chụp nhanh VNDK được kiểm tra trong cây nguồn trong /prebuilts/vndk/vVER, trong đó VER bằng với phiên bản của ảnh chụp nhanh VNDK (tuân theo phiên bản SDK của bản phát hành Android tương ứng). Ví dụ: ảnh chụp nhanh VNDK Android 8.1 có phiên bản 27.

Sử dụng tập lệnh update.py

Tập lệnh update.py (/development/vndk/snapshot/update.py) tự động hoá quá trình thêm ảnh chụp nhanh VNDK tạo sẵn vào cây nguồn. Công cụ này tự động phát hiện các cấu phần phần mềm bản dựng và điền các thuộc tính liên kết một cách thích hợp vào Android.bp được tạo. Tập lệnh này thực hiện các nhiệm vụ sau:

  1. Trong /prebuilts/vndk/vVER, sử dụng repo start để tạo nhánh Git mới.
  2. Tìm nạp và giải nén cấu phần phần mềm bản dựng ảnh chụp nhanh VNDK.
  3. Chạy gen_buildfiles.py để tự động tạo các tệp bản dựng (Android.bp).
  4. Chạy check_gpl_license.py để xác minh các thư viện tạo sẵn được cấp phép theo Giấy phép công cộng chung (GPL) có nguồn được phát hành trong cây nguồn hiện tại.
  5. Sử dụng git commit để xác nhận các thay đổi mới.

Sử dụng ảnh chụp nhanh VNDK được tạo cục bộ

Bạn cũng có thể sử dụng ảnh chụp nhanh VNDK được tạo cục bộ. Khi bạn chỉ định tuỳ chọn --local, tập lệnh update.py sẽ tìm nạp các cấu phần phần mềm bản dựng ảnh chụp nhanh VNDK từ thư mục cục bộ được chỉ định (thay vì máy chủ bản dựng Android) có các tệp android-vndk-$(TARGET_ARCH).zip được tạo từ development/vndk/snapshot/build.sh. Với tuỳ chọn --local, tập lệnh update.py sẽ bỏ qua bước kiểm tra giấy phép GPL và bước git commit.

Cú pháp:

python update.py VER --local local_path

Ví dụ về lệnh cập nhật ảnh chụp nhanh VNDK Android 8.1 bằng các cấu phần phần mềm bản dựng cục bộ trong /path/to/local/dir:

python update.py 27 --local /path/to/local/dir

Ví dụ về cấu trúc thư mục của ảnh chụp nhanh VNDK được tạo cục bộ:

prebuilts/vndk
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (prebuilt libs)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   └── Android.bp         -> (VNDK modules with cflags)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   ├── x86                    -> (same as above)
│   ├── common
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (license file modules)
│   └── Android.bp             -> (*.libraries.30.txt modules)
└── (other VNDK versions)      -> (same as above)
Các cấu phần phần mềm bản dựng cục bộ sẽ được thêm tự động nếu các cấu phần phần mềm được tạo bằng VNDK_SNAPSHOT_BUILD_ARTIFACTS=true.

Cài đặt ảnh chụp nhanh VNDK

Hình ảnh hệ thống sẽ cài đặt các thư viện ảnh chụp nhanh VNDK tại thời điểm tạo bản dựng bằng cách sử dụng thông tin trong BOARD_VNDK_VERSION, PRODUCT_EXTRA_VNDK_VERSIONSro.vndk.version. Bạn có thể kiểm soát những ảnh chụp nhanh VNDK được cài đặt từ các thư mục ảnh chụp nhanh VNDK tạo sẵn (ví dụ: /prebuilts/vndk/v29 hoặc /prebuilts/vndk/v30) bằng một trong các tuỳ chọn sau.

  • Cách 1: BOARD_VNDK_VERSION. Sử dụng mô-đun ảnh chụp nhanh để tạo các mô-đun nhà cung cấp hiện tại và chỉ cài đặt các mô-đun ảnh chụp nhanh cần thiết cho các mô-đun nhà cung cấp.
  • Cách 2: PRODUCT_EXTRA_VNDK_VERSIONS. Cài đặt các mô-đun tổng quan nhanh VNDK bất kể các mô-đun nhà cung cấp hiện tại. Thao tác này sẽ cài đặt các ảnh chụp nhanh VNDK tạo sẵn được liệt kê trong PRODUCT_EXTRA_VNDK_VERSIONS mà không liên kết các ảnh chụp nhanh đó với bất kỳ mô-đun nào khác tại thời điểm tạo bản dựng.

Đặt BOARD_VNDK_VERSION

BOARD_VNDK_VERSION cho biết phiên bản VNDK mà các mô-đun của nhà cung cấp hiện tại bắt buộc phải tạo. Nếu BOARD_VNDK_VERSION có phiên bản ảnh chụp nhanh VNDK có sẵn trong thư mục /prebuilts/vndk, thì ảnh chụp nhanh VNDK được chỉ định trong BOARD_VNDK_VERSION sẽ được cài đặt. Nếu bản lưu toàn cảnh VNDK không có trong thư mục, lỗi bản dựng sẽ xảy ra.

Việc xác định BOARD_VNDK_VERSION cũng cho phép cài đặt các mô-đun VNDK. Các mô-đun của nhà cung cấp liên kết với phiên bản ảnh chụp nhanh VNDK được xác định trong BOARD_VNDK_VERSION tại thời điểm tạo bản dựng (điều này không tạo các mô-đun VNDK hiện tại trong nguồn hệ thống). Khi tải cây nguồn đầy đủ xuống từ một kho lưu trữ, cả nguồn hệ thống và nguồn nhà cung cấp đều dựa trên cùng một bản phát hành Android.

Đặt PRODUCT_EXTRA_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS liệt kê các phiên bản VNDK bổ sung cần cài đặt. Thông thường, bạn chỉ cần có một ảnh chụp nhanh VNDK cho phân vùng nhà cung cấp hiện tại. Tuy nhiên, trong một số trường hợp, bạn có thể cần đưa nhiều ảnh chụp nhanh vào một hình ảnh hệ thống. Ví dụ: GSI có nhiều ảnh chụp nhanh để hỗ trợ nhiều phiên bản nhà cung cấp bằng một hình ảnh hệ thống. Bằng cách đặt PRODUCT_EXTRA_VNDK_VERSIONS, bạn có thể cài đặt các mô-đun ảnh chụp nhanh VNDK ngoài phiên bản VNDK trong BOARD_VNDK_VERSION.

Nếu PRODUCT_EXTRA_VNDK_VERSIONS có một danh sách phiên bản cụ thể, hệ thống xây dựng sẽ tìm các bản tổng quan nhanh được tạo sẵn của danh sách phiên bản trong thư mục prebuilts/vndk. Nếu hệ thống xây dựng xác định được tất cả ảnh chụp nhanh được liệt kê, thì hệ thống sẽ cài đặt các tệp ảnh chụp nhanh đó cho từng VNDK APEX (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. Các phiên bản bị thiếu sẽ tạo ra lỗi bản dựng.

Các mô-đun VNDK không liên kết với các mô-đun của nhà cung cấp tại thời điểm tạo bản dựng nhưng có thể được sử dụng trong thời gian chạy nếu các mô-đun của nhà cung cấp trong phân vùng của nhà cung cấp yêu cầu một trong các phiên bản VNDK đã cài đặt. PRODUCT_EXTRA_VNDK_VERSIONS chỉ hợp lệ nếu BOARD_VNDK_VERSION được xác định.

PLATFORM_VNDK_VERSION

PLATFORM_VNDK_VERSION xác định phiên bản VNDK cho các mô-đun VNDK hiện tại trong nguồn hệ thống. Giá trị này được đặt tự động:

  • Trước khi phát hành, PLATFORM_VNDK_VERSION được đặt thành PLATFORM_VERSION_CODENAME.
  • Tại thời điểm phát hành, PLATFORM_SDK_VERSION sẽ được sao chép vào PLATFORM_VNDK_VERSION.

Sau khi phát hành phiên bản Android, các thư viện VNDK hiện tại sẽ được cài đặt vào VNDK APEX (/system/apex/com.android.vndk.vVER), trong đó VER là phiên bản được lưu trữ trong PLATFORM_VNDK_VERSION.

Khi BOARD_VNDK_VERSION được đặt thành current, PLATFORM_VNDK_VERSION sẽ được lưu trữ trong ro.vndk.version, nếu không BOARD_VNDK_VERSION sẽ được lưu trữ trong ro.vndk.version. PLATFORM_VNDK_VERSION được đặt thành phiên bản SDK khi Android phát hành; trước khi phát hành, tên mã Android gồm chữ và số được dùng cho PLATFORM_VNDK_VERSION.

Tóm tắt chế độ cài đặt phiên bản VNDK

Bảng này tóm tắt các chế độ cài đặt phiên bản VNDK.

Bản dựng nhà cung cấp
Ban
Phiên bản
Bản phát hành SDK
Phiên bản
nền tảng
Thuộc tính Phiên bản
Thư mục cài đặt
Các mô-đun VNDK hiện tại current Trước CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
Sau SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
Mô-đun tổng quan nhanh tạo sẵn VNDK_VER
dành cho ảnh chụp nhanh
Trước hoặc Sau CODE_NAME
hoặc SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • Phiên bản bo mạch (BOARD_VNDK_VERSION). Phiên bản VNDK mà các mô-đun của nhà cung cấp cần để tạo. Đặt thành current nếu mô-đun của nhà cung cấp có thể liên kết với các mô-đun hệ thống hiện tại.
  • Phiên bản nền tảng (PLATFORM_VNDK_VERSION). Phiên bản VNDK mà các mô-đun hệ thống hiện tại đang xây dựng. Chỉ được tạo khi BOARD_VNDK_VERSION bằng hiện tại.
  • Thuộc tính phiên bản (ro.vndk.version). Thuộc tính chỉ định phiên bản VNDK mà các tệp nhị phân và thư viện trong vendor.img cần để chạy. Được lưu trữ trong vendor.img tại /vendor/default.prop.