Tạo ảnh chụp nhanh VNDK

Ảnh chụp nhanh VNĐK là một tập hợp các lib VNĐK-core và VNĐK-SP 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 ảnh chụp nhanh VNĐK tương ứng mà vendor.img cần.

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

Ảnh chụp nhanh tòa nhà

Máy chủ bản dựng Android tạo các tạo phẩm bản dựng và tệp ảnh chụp nhanh VNDK bằng cách sử dụng các tham số bản dựng và lệnh bản dựng sau.

Xây dựng thông số

Tên mục tiêu xây dựng là vndk . Cấu hình mục tiêu xây 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 vòm mục tiêu Hình ảnh hệ thống chung (GSI) ( arm , arm64 , x86 , x86_64 ).
  • TARGET_ARCH_VARIANT . Đối với ảnh chụp nhanh v28 (Android 9) trở lên, bao gồm các cấu hình phổ biến được liệt kê ở trên.

Xây dựng lệnh

Đối với ảnh chụp nhanh chính thức, Android 9 trở lên bao gồm mục tiêu mẫu ( vndk ) trong vndk.mk để xây dựng và xuất ảnh chụp nhanh VNĐK thành $DIST_DIR . Tệp ZIP ảnh 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ủ xây dựng Android sử dụng tập lệnh build.sh để xây dựng tất cả các phiên bản vòm được hỗ trợ bằng lệnh sau.

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

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

Xây dựng tại địa phương

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

  • Để xây dựng 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 xây dựng sau ( build.sh ).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • Để xây dựng một TARGET_ARCH cụ thể, hãy thực hiện các lệnh sau.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

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

Tệp ảnh chụp nhanh

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

  • Biến thể nhà cung cấp của thư viện chia sẻ VNĐK-core và VNĐK-SP.
    • Các thư viện chia sẻ LL-NDK không cần thiết vì chú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 xây dựng và đưa vào.
  • Danh sách các thư viện của VNDK-core, VNDK-SP, LL-NDK, VNDK-private có tại [vndkcore|vndksp|llndk|vndkprivate].libraries.txt .
  • Các tập tin giấy phép.
  • module_paths.txt . Ghi lại đường dẫn mô-đun cho tất cả thư viện VNĐK, cần thiết để kiểm tra xem các dự án GPL có nguồn được phát hành trong cây nguồn Android nhất định hay không.

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

Cấu trúc thư mục ảnh chụp nhanh của VNĐK
Hình 1. Cấu trúc thư mục snapshot của VNDK (ví dụ)

Xây dựng ả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 xây dựng vendor.img bất kể phiên bản Android trên cây nguồn là gì. Ảnh chụp nhanh VNĐK 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ị 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 VNĐK đó, bạn cần có các tạo phẩm bổ sung như tệp tiêu đề và cờ đã xuất.

Để tạo các tạo phẩm như vậy (cùng với ảnh chụp nhanh VNĐK) 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 chụp nhanh arm64 VNĐK với các tạo phẩm xây dựng. Các tệp được in đậm là các tệp mới được thêm vào ảnh chụp nhanh VNDK thông thường (được hiển thị 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 đề được 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

Đang tải lên ảnh chụp nhanh VNĐK

Ảnh chụp nhanh VNĐK được kiểm tra trong cây nguồn trong /prebuilts/vndk/v VER , trong đó VER bằng với phiên bản của ảnh chụp nhanh VNĐK (theo phiên bản SDK của bản phát hành Android tương ứng). 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 hóa quá trình thêm ảnh chụp nhanh VNĐK dựng sẵn vào cây nguồn. Nó tự động phát hiện các thành phần lạ của bản dựng và điền một cách thích hợp vào các thuộc tính liên quan trong Android.bp được tạo. Kịch bản này thực hiện các tác vụ sau:

  1. Trong /prebuilts/vndk/v VER , sử dụng repo start để tạo nhánh Git mới.
  2. Tìm nạp và giải nén các tạo phẩm xây dựng ảnh chụp nhanh VNĐK.
  3. Chạy gen_buildfiles.py để tự động tạo tệp xây dựng ( Android.bp ).
  4. Chạy check_gpl_license.py để xác minh các thư viện dựng 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 để thực hiện những thay đổi mới.

Sử dụng ảnh chụp nhanh VNĐK được xây dựng cục bộ

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

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 VNĐK với các tạo phẩm bản dựng cục bộ trong /path/to/local/dir :

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

Cấu trúc thư mục ví dụ của ảnh chụp nhanh VNĐK được xây dựng 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 tạo phẩm cục bộ được thêm tự động nếu các tạo phẩm được tạo bằng VNDK_SNAPSHOT_BUILD_ARTIFACTS=true .

Cài đặt ảnh chụp nhanh VNĐK

Image hệ thống cài đặt các thư viện chụp nhanh VNĐK tại thời điểm xây dựng bằng cách sử dụng thông tin trong BOARD_VNDK_VERSION , PRODUCT_EXTRA_VNDK_VERSIONS , và ro.vndk.version . Bạn có thể kiểm soát các ảnh chụp nhanh VNĐK nào sẽ được cài đặt từ các thư mục ảnh chụp nhanh VNĐK dựng sẵn (ví dụ: /prebuilts/vndk/v29 hoặc /prebuilts/vndk/v30 ) bằng một trong các tùy chọn sau.

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

Cài đặt BOARD_ồngK_VERSION

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

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

Cài đặt product_EXTRA_ồngK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS liệt kê các phiên bản VNĐK bổ sung sẽ được cài đặt. Thông thường chỉ cần có một bản chụp nhanh VNĐK cho phân vùng nhà cung cấp hiện tại là đủ. 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 ả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 với một hình ảnh hệ thống. Bằng cách cài đặt PRODUCT_EXTRA_VNDK_VERSIONS , bạn có thể cài đặt mô-đun chụp nhanh VNĐK ngoài phiên bản VNĐK trong BOARD_VNDK_VERSION .

Nếu PRODUCT_EXTRA_VNDK_VERSIONS có danh sách phiên bản cụ thể, hệ thống xây dựng sẽ tìm kiếm các ảnh chụp nhanh dựng 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 định vị tất cả các ảnh chụp nhanh được liệt kê, nó sẽ cài đặt các tệp ảnh chụp nhanh đó vào từng VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER . Thiếu phiên bản sẽ tạo ra lỗi xây dựng.

Các mô-đun VNĐK không liên kết với các mô-đun nhà cung cấp tại thời điểm xây dựng nhưng có thể được sử dụng trong thời gian chạy nếu các 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 VNĐK đã cài đặt. PRODUCT_EXTRA_VNDK_VERSIONS chỉ hợp lệ nếu BOARD_VNDK_VERSION được xác định.

PLATFORM_đồngK_VERSION

PLATFORM_VNDK_VERSION xác định phiên bản VNĐK cho các module VNĐK hiện tại trong nguồn hệ thống. Giá trị được đặt tự động:

  • Trước khi phát hành, PLATFORM_VNDK_VERSION được đặt là 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 VNĐK hiện tại sẽ được cài đặt vào VNĐK APEX ( /system/apex/com.android.vndk.v VER ), 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 được lưu trong ro.vndk.version , nếu không BOARD_VNDK_VERSION được lưu 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ã chữ và số Android được sử dụng cho PLATFORM_VNDK_VERSION .

Tổng hợp cài đặt phiên bản VNĐK

Bảng dưới đây tóm tắt cài đặt phiên bản VNĐK.

Người bán
Xây dựng
Bảng
Phiên bản
SDK
Giải phóng
Nền tảng
Phiên bản
Phiên bản
Tài sản
Cài đặt thư mục
Các module VNĐK hiện tại current Trước CODE_NAME CODE_NAME /system/apex/com.android.vndk.v CODE_NAME
Sau đó SDK_VER SDK_VER /system/apex/com.android.vndk.v SDK_VER
Các mô-đun chụp nhanh dựng sẵn VNDK_VER
để chụp ảnh nhanh
Trước hoặc Sau CODE_NAME
hoặc SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.v VNDK_VER
  • Phiên bản bảng ( BOARD_VNDK_VERSION ). Phiên bản VNĐK mà module của nhà cung cấp yêu cầu xây dựng. Đặ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 module hệ thống hiện tại đang xây dựng. Chỉ được xây dựng 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 VNĐK mà các tệp nhị phân và lib trong Vendor.img yêu cầu chạy. Được lưu trữ trong vendor.img tại /vendor/default.prop .