Generuj zrzuty VNDK

Zrzut VNDK to zestaw bibliotek VNDK-core i VNDK-SP dla wersji Androida. Możesz uaktualnić tylko partycję systemową, jeśli system.img zawiera odpowiedni zrzut VNDK wymagany przez vendor.img

Oficjalne zrzuty VNDK są tworzone automatycznie na serwerze kompilacji Androida. i zameldował(a) się w /prebuilts/vndk drzewa źródłowego Androida. Dla: w celach programistycznych, można tworzyć zrzuty VNDK lokalnie. Zrzuty VNDK są obsługiwane w przypadku odmian arm, arm64, x86 i x86_64 TARGET_ARCH.

Zrzuty kompilacji

Serwer kompilacji Androida generuje artefakty kompilacji i pliki zrzutu VNDK za pomocą podanych niżej parametrów kompilacji i poleceń kompilacji.

Parametry kompilacji

Nazwa celu kompilacji to vndk. Konfiguracja celu kompilacji poniżej.

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
  • Element TARGET_ARCH jest taki sam jak ogólny obraz systemu (GSI) łupy docelowe (arm, arm64, x86, x86_64).
  • TARGET_ARCH_VARIANT W przypadku zrzutu w wersji 28 (Android 9) lub nowszej obejmuje popularne konfiguracje wymienione powyżej.

Polecenia kompilacji

Oficjalne podsumowania: Android 9 i nowsze wersje zawiera przykładowy cel (vndk) w: vndk.mk, który kompiluje i wyświetla VNDK zrzut do $DIST_DIR. Plik ZIP ze zrzutem używa formatu android-vndk-$(TARGET_ARCH).zip Na przykład:

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

Serwer kompilacji Androida używa polecenia skrypt build.sh do utworzenia całego obsługiwanego archiwum. rodzaje za pomocą poniższego polecenia.

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

Zrzut VNDK wersji Androida jest generowany na podstawie gałąź wydania.

Kompiluj lokalnie

W trakcie programowania możesz tworzyć zrzuty VNDK z lokalnego drzewa źródłowego za pomocą tych poleceń.

  • Aby utworzyć wszystkie obsługiwane łuki jednocześnie, wykonaj ten skrypt kompilacji (build.sh).
    cd $ANDROID_BUILD_TOP
    development/vndk/snapshot/build.sh
    
  • Aby utworzyć konkretny element TARGET_ARCH, wykonaj to poleceń.
    lunch aosp_TARGET_ARCH-user
    m -j vndk dist
    

Zostanie utworzony odpowiedni plik android-vndk-$(TARGET_ARCH).zip poniżej $DIST_DIR.

Pliki zrzutów

Zrzut VNDK zawiera następujące pliki.

  • Wariant dostawcy bibliotek udostępnionych VNDK-core i VNDK-SP.
    • Udostępnione biblioteki LL-NDK nie są potrzebne, ponieważ są zgodne wstecznie.
    • W przypadku 64-bitowych celów: TARGET_ARCH i Liczba utworzonych i uwzględnionych bibliotek TARGET_2ND_ARCH:
  • Lista bibliotek z rdzeniami VNDK, VNDK-SP, LL-NDK i VNDK-prywatnych znajduje się na stronie [vndkcore|vndksp|llndk|vndkprivate].libraries.txt
  • Pliki licencji.
  • module_paths.txt Rejestruje ścieżki modułów dla wszystkich plików VNDK bibliotekami potrzebnymi do sprawdzenia, czy projekty SGT mają źródła w danym drzewie źródłowym Androida.

Dla danego pliku ZIP ze zrzutem VNDK android-vndk-$(TARGET_ARCH).zip, gotowe biblioteki VNDK są pogrupowane w osobnych katalogach o nazwach arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT) według interfejsu ABI i indywidualnością. Na przykład w języku android-vndk-arm64.zip jest 64-bitowa libs, są umieszczane w hierarchii poniżej arch-arm64-armv8-a, a 32-bitowe biblioteki lib to umieszczonych na liście arch-arm-armv8-a. Poniższy przykład pokazuje Struktura katalogu dla VNDK w arm64 (TARGET_ARCH=arm64) plik ZIP ze zrzutem (android-vndk-arm64.zip).

Struktura katalogu zrzutów VNDK
Rysunek 1. Struktura katalogu zrzutów VNDK (przykład)

Kompilacja na potrzeby zrzutów dostawców

Android 11 obsługuje dostawca , które pozwalają kompilować vendor.img niezależnie wersję Androida z drzewa źródłowego. Domyślny zrzut VNDK zawiera pliki z biblioteki udostępnionej (.so), które można zainstalować na urządzeniach i z plikami binarnymi w C++ dostawcy w czasie działania. Aby budować w porównaniu tego zrzutu VNDK, potrzebujesz dodatkowych artefaktów, takich jak pliki nagłówka wyeksportowanych flag.

Generowanie takich artefaktów (wraz ze zrzutem VNDK) ze źródła lokalnego użyj poniższego polecenia.

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

To polecenie tworzy android-vndk-$(TARGET_ARCH).zip pliki w $DIST_DIR Przykład poniżej to plik ZIP ze zrzutem arm64 VNDK za pomocą artefaktów kompilacji. Pliki pogrubione to nowo dodane pliki do normalnego folderu VNDK (widoczne na Rys. 1) i dołącz pliki JSON (które przechowują cflags każdej biblioteki) i wszystkie wyeksportowane pliki nagłówka.

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

Prześlij zrzuty VNDK

Zrzuty VNDK są sprawdzane w drzewie źródłowym w /prebuilts/vndk/vVER, gdzie Wartość VER jest równa wersji zrzutu VNDK (jest ona zgodna z wersją pakietu SDK odpowiedniej wersji Androida). Dla: na przykład zrzut VNDK Androida 8.1 ma wersję 27.

Używanie skryptu update.py

Skrypt update.py (/development/vndk/snapshot/update.py) automatyzuje proces przez dodanie gotowego zrzutu VNDK do drzewa źródłowego. Automatycznie wykrywa i poprawnie wypełnia powiązane właściwości w – Android.bp. Ten skrypt wykonuje te zadania:

  1. W /prebuilts/vndk/vVER do utworzenia nowej gałęzi Git używana jest repo start.
  2. Pobiera i rozpakowuje artefakty kompilacji zrzutu VNDK.
  3. Uruchamia polecenie gen_buildfiles.py, aby automatycznie generować pliki kompilacji (Android.bp).
  4. Uruchamia polecenie check_gpl_license.py, aby zweryfikować gotowe biblioteki licencjonowane na mocy ogólnej licencji publicznej (GPL) mają źródła udostępnione w bieżącego drzewa źródłowego.
  5. Wykorzystuje git commit do zatwierdzania nowych zmian.

Używaj lokalnie utworzonych zrzutów VNDK

Możesz też używać lokalnie utworzonych zrzutów VNDK. Gdy --local określono opcję, skrypt update.py pobiera zrzut VNDK artefaktów kompilacji z określonego katalogu lokalnego (a nie serwer kompilacji), który ma pliki android-vndk-$(TARGET_ARCH).zip, wygenerowany na podstawie development/vndk/snapshot/build.sh. Za pomocą --local, skrypt update.py pomija sprawdzanie licencji i git commit czynności.

Składnia:

python update.py VER --local local_path

Przykładowe polecenie aktualizacji zrzutu VNDK Androida 8.1 za pomocą kompilacji lokalnej artefakty w /path/to/local/dir:

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

Przykładowa struktura katalogu lokalnego zrzutu VNDK:

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)
Lokalne artefakty kompilacji są dodawane automatycznie, jeśli artefakty zostały utworzone za pomocą VNDK_SNAPSHOT_BUILD_ARTIFACTS=true

Zainstaluj zrzuty VNDK

Obraz systemu instaluje biblioteki zrzutu VNDK w czasie kompilacji przy użyciu informacje w: BOARD_VNDK_VERSION, PRODUCT_EXTRA_VNDK_VERSIONS i ro.vndk.version. Możesz kontrolować, które zrzuty VNDK mają być instalowane z gotowego dysku VNDK katalogów zrzutów (np. /prebuilts/vndk/v29 lub /prebuilts/vndk/v30), używając jednej z poniższych opcji.

  • Opcja 1. BOARD_VNDK_VERSION. Użyj modułów migawek do tworzenia bieżących modułów dostawcy i instalowania tylko oraz moduły zrzutów, które są wymagane dla modułów dostawcy.
  • Opcja 2. PRODUCT_EXTRA_VNDK_VERSIONS. Zainstaluj moduły zrzutu VNDK niezależnie od bieżących modułów dostawcy. Spowoduje to zainstalowanie gotowych zrzutów VNDK wymienionych w PRODUCT_EXTRA_VNDK_VERSIONS bez łączenia go z żadnym innym kontem modułów podczas tworzenia kampanii.

Ustaw BOARD_VNDK_VERSION

BOARD_VNDK_VERSION pokazuje wersję VNDK używaną przez obecnego dostawcę które są niezbędne. Jeśli BOARD_VNDK_VERSION ma dostępna wersja zrzutu VNDK w katalogu /prebuilts/vndk, Zainstalowano zrzut VNDK wskazany w BOARD_VNDK_VERSION. Jeśli zrzut VNDK nie jest dostępny w katalogu, występuje błąd kompilacji.

Zdefiniowanie atrybutu BOARD_VNDK_VERSION umożliwia również skonfigurowanie modułów VNDK Zainstalowano. Moduły dostawcy są połączone z wersją zrzutu VNDK zdefiniowaną w BOARD_VNDK_VERSION w momencie kompilacji (nie jest to bieżąca wersja VNDK w źródle systemowym). Podczas pobierania pełnego drzewa źródłowego z jest repozytorium, źródła systemowe i źródła oparte na tym samym Androidzie wersji.

Ustaw PRODUCT_EXTRA_VNDK_VERSIONS

PRODUCT_EXTRA_VNDK_VERSIONS wyświetla dodatkowe wersje VNDK, które mają zostać Zainstalowano. Normalnie wystarczy jeden zrzut VNDK dla bieżącego partycji dostawcy. Jednak w niektórych przypadkach konieczne może być dodanie kilku i zrzuty w jednym obrazie systemu. Na przykład GSI zawiera wiele zrzutów dysku, obsługi wielu wersji dostawców z jednym obrazem systemu. Wg ustawienia PRODUCT_EXTRA_VNDK_VERSIONS, możesz zainstalować zrzut VNDK modułów oprócz wersji VNDK w BOARD_VNDK_VERSION.

Jeśli PRODUCT_EXTRA_VNDK_VERSIONS ma konkretną listę wersji, system kompilacji wyszukuje gotowe zrzuty listy wersji w prebuilts/vndk. Jeśli system kompilacji znajdzie wszystkie dodaje zrzuty ekranu, instaluje te pliki zrzutów dla każdego punktu APEX VNDK (out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.vVER. Brak wersji powoduje błąd kompilacji.

Moduły VNDK nie łączą się z modułami dostawcy w momencie kompilacji, ale można je jest używana w czasie działania, jeśli moduły dostawcy na partycji dostawcy wymagają jednego z tych elementów: z zainstalowanymi wersjami VNDK. Wartość PRODUCT_EXTRA_VNDK_VERSIONS jest prawidłowa tylko wtedy, gdy zdefiniowano BOARD_VNDK_VERSION.

PLATFORM_VNDK_VERSION

PLATFORM_VNDK_VERSION określa wersję VNDK dla bieżącego VNDK w źródle systemowym. Wartość jest ustawiana automatycznie:

  • Przed wydaniem sekcji PLATFORM_VNDK_VERSION jest ustawiony jako PLATFORM_VERSION_CODENAME
  • W momencie wersji aplikacja PLATFORM_SDK_VERSION jest kopiowana do PLATFORM_VNDK_VERSION

Po opublikowaniu wersji na Androida bieżące biblioteki VNDK zostaną zainstalowano w VNDK APEX (/system/apex/com.android.vndk.vVER), gdzie VER to wersja przechowywana w PLATFORM_VNDK_VERSION

Gdy BOARD_VNDK_VERSION ma wartość current, makro PLATFORM_VNDK_VERSION jest przechowywane w: ro.vndk.version, w przeciwnym razie BOARD_VNDK_VERSION jest przechowywana w ro.vndk.version PLATFORM_VNDK_VERSION ma wartość: wersję pakietu SDK w momencie opublikowania Androida; przed jego wydaniem alfanumeryczny system operacyjny dla PLATFORM_VNDK_VERSION jest używany kryptonim.

Podsumowanie ustawień wersji VNDK

Tabela zawiera podsumowanie ustawień wersji VNDK.

Tworzenie
dostawcy
Wersja
tablicy
Wersja
pakietu SDK
Wersja
platformy
Właściwość wersji
Zainstaluj katalog
Bieżące moduły VNDK current Przed CODE_NAME CODE_NAME /system/apex/com.android.vndk.vCODE_NAME
Po SDK_VER SDK_VER /system/apex/com.android.vndk.vSDK_VER
Gotowe moduły zrzutu VNDK_VER
dla zrzutu
Przed lub po CODE_NAME
lub SDK_VER
VNDK_VER /system_ext/apex/com.android.vndk.vVNDK_VER
  • Wersja płyty (BOARD_VNDK_VERSION). VNDK wersji wymaganej przez moduły dostawcy. Ustaw jako current, jeśli moduły dostawcy można połączyć z bieżącymi modułami systemowymi.
  • Wersja platformy (PLATFORM_VNDK_VERSION). Wersja VNDK tworzona przez bieżące moduły systemowe. Utworzone tylko wtedy, gdy BOARD_VNDK_VERSION – wartość bieżąca.
  • Usługa wersji (ro.vndk.version). Usługa określające wersję VNDK, której pliki binarne i lib w pliku provider.img wymagają bieganie. Zapisano w: vendor.img w /vendor/default.prop