Tạo ảnh chụp nhanh VNDK

Tổng quan nhanh VNDK là một tập hợp các thư viện VNDK-core và VNDK-SP dành cho 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 bao gồm thông tin tổng quan nhanh tương ứng về VNDK mà vendor.img

Các bản tổng quan nhanh chính thức của VNDK được tạo tự động trên máy chủ bản dựng Android và đánh dấu vào /prebuilts/vndk trong cây nguồn Android. Cho bạn có thể tạo ảnh chụp nhanh VNDK cục bộ. Tổng quan nhanh về VNDK hỗ trợ các phiên bản TARGET_ARCH arm, arm64, x86 và x86_64.

Tạo bản tổng quan nhanh

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

Tham 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 Hình ảnh hệ thống chung (GSI) số vòm mục tiêu (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 nêu ở trên.

Tạo lệnh

Để xem thông tin tổng quan nhanh chính thức, Android 9 trở lên bao gồm mục tiêu mẫu (vndk) trong vndk.mk tạo và tạo ra một VNDK vào $DIST_DIR. Tệp ZIP chụp 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ả vòm đượ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.

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

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

Tệp ảnh chụp nhanh

Bản tổng quan nhanh VNDK bao gồm các tệp sau.

  • Biến thể nhà cung cấp của thư viện chia sẻ VNDK-core và VNDK-SP.
    • Không cần đến các 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ả TARGET_ARCH và Thư viện TARGET_2ND_ARCH được xây dựng và đi kèm.
  • Bạn có thể xem danh sách các thư viện VNDK-core, VNDK-SP, LL-NDK và VNDK-private tại [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ả VNDK cần thiết để kiểm tra nhằm đảm bảo các dự án GPL có nguồn được phát hành trong một cây nguồn Android nhất định.

Đối với một tệp ZIP chụp nhanh của VNDK, android-vndk-$(TARGET_ARCH).zip, thư viện VNDK tạo sẵn được nhóm thành các thư mục riêng biệt có tên arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) theo ABI chút ít. Ví dụ: đối với android-vndk-arm64.zip, lib 64 bit được đặt trong arch-arm64-armv8-a và các lib 32 bit là đượ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 arm64 (TARGET_ARCH=arm64) VNDK tệp ZIP chụp nhanh (android-vndk-arm64.zip).

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

Xây dựng để lưu ảnh chụp nhanh về nhà cung cấp

Hỗ trợ Android 11 nhà cung cấp ảnh chụp nhanh, 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 được chia sẻ (.so) có thể được cài đặt vào thiết bị và 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. Để xây dựng dựa trên Ảnh chụp nhanh VNDK đó, bạn cần các cấu phần phần mềm bổ sung như tệp tiêu đề và Cờ đã xuất.

Để tạo ra những hiện vật đó (cùng với ảnh chụp nhanh VNDK) từ một nguồn địa phương hãy sử dụng lệnh sau.

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

Lệnh này tạo android-vndk-$(TARGET_ARCH).zip tệp trong $DIST_DIR Ví dụ bên dưới là tệp ZIP chứa ảnh chụp nhanh của arm64 VNDK với 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 được thêm vào VNDK thông thường ảnh chụp nhanh (như trong Hình 1) và bao gồm các tệp JSON (lưu trữ cflags của mỗi 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 tương đương với phiên bản của ảnh chụp nhanh VNDK (theo phiên bản SDK của bản phát hành Android tương ứng). Cho ví dụ: ảnh chụp nhanh Android 8.1 VNDK 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á quy trình thêm ảnh chụp nhanh VNDK được tạo sẵn vào cây nguồn. Tính năng này tự động phát hiện tạo cấu phần phần mềm và điền thích hợp vào các thuộc tính được liên kết trong đã tạo Android.bp. Tập lệnh này thực hiện các tác 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ác cấu phần phần mềm bản dựng tổng quan nhanh VNDK.
  3. Chạy gen_buildfiles.py để tự động tạo tệp bản dựng (Android.bp).
  4. Chạy check_gpl_license.py để xác minh thư viện tạo sẵn được cấp phép theo Giấy phép chung (GPL) có các nguồn được công bố tại cây nguồn hiện tại.
  5. Sử dụng git commit để cam kết 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ể dùng các ảnh chụp nhanh VNDK được tạo cục bộ. Khi --local được chỉ định, thì tập lệnh update.py sẽ tìm nạp ảnh chụp nhanh VNDK cấu phần phần mềm bản dựng từ thư mục cục bộ được chỉ định (thay vì Android build server) có các tệp android-vndk-$(TARGET_ARCH).zip được tạo từ development/vndk/snapshot/build.sh. Với Lựa chọn --local, tập lệnh update.py bỏ qua GPL kiểm tra giấy phép và git commit bước.

Cú pháp:

python update.py VER --local local_path

Lệnh mẫu để cập nhật ảnh chụp nhanh Android 8.1 VNDK bằng bản dựng cục bộ cấu phần phần mềm 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ấu phần phần mềm bản dựng cục bộ sẽ được tự động thêm nếu cấu phần phần mềm được tạo bằng VNDK_SNAPSHOT_BUILD_ARTIFACTS=true

Cài đặt bản tổng quan nhanh VNDK

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

  • Cách 1: BOARD_VNDK_VERSION. Sử dụng các mô-đun tổng quan nhanh để xây dựng 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 bắt buộc đối với mô-đun nhà cung cấp.
  • Cách 2: PRODUCT_EXTRA_VNDK_VERSIONS. Cài đặt các mô-đun tổng quan nhanh của VNDK bất kể các mô-đun của nhà cung cấp hiện tại. Thao tác này sẽ cài đặt ảnh chụp nhanh VNDK được tạo sẵn có trong PRODUCT_EXTRA_VNDK_VERSIONS mà không liên kết chúng với bất kỳ ứng dụng nào khác vào thời điểm xây dựng.

Đặt Board_VNDK_VERSION

BOARD_VNDK_VERSION cho thấy phiên bản VNDK của nhà cung cấp hiện tại cần có các mô-đun để xây dựng. Nếu BOARD_VNDK_VERSION có một phiên bản tổng quan nhanh VNDK có sẵn trong thư mục /prebuilts/vndk, Bản tổng quan nhanh VNDK chỉ báo trong BOARD_VNDK_VERSION đã được cài đặt. Nếu bản tổng quan nhanh VNDK không có trong thư mục, đã xảy ra lỗi bản dựng.

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

Đặt PRODUCT_EXTRA_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS liệt kê các phiên bản VNDK bổ sung sẽ . Thông thường, bạn chỉ cần có một ảnh chụp nhanh VNDK cho giá trị hiện tại phân vùng nhà cung cấp. Tuy nhiên, trong một số trường hợp, bạn có thể cần bao gồm nhiều ảnh chụp nhanh trong một ảnh hệ thống. Ví dụ: GSI có nhiều bản tổng quan nhanh để hỗ trợ nhiều phiên bản nhà cung cấp cùng với một ảnh hệ thống. Theo chế độ cài đặt PRODUCT_EXTRA_VNDK_VERSIONS, bạn có thể cài đặt bản tổng quan nhanh VNDK ngoài phiên bản VNDK trong BOARD_VNDK_VERSION.

Nếu PRODUCT_EXTRA_VNDK_VERSIONS có danh sách các phiên bản cụ thể, hệ thống xây dựng tìm kiếm ảnh chụp 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 tìm thấy tất cả những các tệp tổng quan nhanh này, nó sẽ cài đặt các tệp tổng quan nhanh đó vào mỗi APEX của VNDK (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. Việc thiếu các phiên bản sẽ gây 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 trong thời gian xây dựng nhưng có thể được sử dụng trong thời gian chạy nếu mô-đun nhà cung cấp trong phân vùng 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 hợp lệ chỉ khi BOARD_VNDK_VERSION được định nghĩa.

PLATFORM_VNDK_VERSION

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

  • Trước khi phát hành, PLATFORM_VNDK_VERSION được đặt thành PLATFORM_VERSION_CODENAME
  • Khi phát hành, PLATFORM_SDK_VERSION được sao chép vào PLATFORM_VNDK_VERSION

Sau khi phiên bản Android được phát hành, các thư viện VNDK hiện tại đã đượ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 bạn đặt BOARD_VNDK_VERSION thành current, PLATFORM_VNDK_VERSION đượ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, Android gồm chữ và số tên mã đượ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 của phiên bản VNDK.

Xây dựng
nhà cung cấp
Phiên bản
bảng
Bản phát hành
SDK
Phiên bản
nền tảng
Thuộc tính
phiên bản
Cài đặt thư mục
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
để xem tổng quan 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 Board (BOARD_VNDK_VERSION). VNDK phiên bản mà mô-đun nhà cung cấp yêu cầu tạo. Đặt thành current nếu mô-đun 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). Tài sản chỉ định phiên bản VNDK mà các tệp nhị phân và thư viện trong provider.img yêu cầu chạy. Lưu trữ trong vendor.img tại /vendor/default.prop