Migawka VNDK to zestaw bibliotek VNDK-core i VNDK-SP dla wersji Androida. Można uaktualnić tylko partycję systemową, jeśli plik system.img
zawiera odpowiednią migawkę VNDK potrzebną w pliku vendor.img
.
Oficjalne migawki VNDK są tworzone automatycznie na serwerze kompilacji Androida i zapisywane w /prebuilts/vndk
drzewa źródeł Androida. Do celów programistycznych można lokalnie tworzyć migawki VNDK. Migawki VNDK są obsługiwane dla odmian arm, arm64, x86 i x86_64 TARGET_ARCH
.
Tworzenie migawek
Serwer kompilacji systemu Android generuje artefakty kompilacji i pliki migawek VNDK przy użyciu następujących parametrów kompilacji i poleceń kompilacji.
Parametry kompilacji
Nazwa docelowa kompilacji to vndk
. Konfiguracja docelowa kompilacji jest pokazana 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
-
TARGET_ARCH
jest taki sam jak łuki docelowe Generic System Image (GSI) (arm
,arm64
,x86
,x86_64
). -
TARGET_ARCH_VARIANT
. W przypadku migawki w wersji 28 (Android 9) i nowszej zawiera popularne konfiguracje wymienione powyżej.
Komendy budowania
W przypadku oficjalnych migawek system Android 9 i nowsze wersje zawierają przykładowy obiekt docelowy ( vndk
) w vndk.mk
, który tworzy i wysyła migawkę VNDK do $DIST_DIR
. Plik ZIP migawki ma format android-vndk-$(TARGET_ARCH).zip
. Na przykład:
lunch aosp_TARGET_ARCH-user
make -j vndk dist [BOARD_VNDK_VERSION=current]
Serwer kompilacji systemu Android używa skryptu build.sh
do tworzenia wszystkich obsługiwanych wersji Arch za pomocą następującego polecenia.
DIST_DIR=dist_dir development/vndk/snapshot/build.sh
Migawka VNDK dla wersji systemu Android jest generowana z gałęzi wydania tej wersji.
Budowanie lokalnie
Podczas programowania można tworzyć migawki VNDK z lokalnego drzewa źródłowego za pomocą następujących poleceń.
- Aby zbudować wszystkie obsługiwane łuki na raz, wykonaj następujący skrypt kompilacji (
build.sh
).cd $ANDROID_BUILD_TOP
development/vndk/snapshot/build.sh
- Aby zbudować jeden konkretny
TARGET_ARCH
, wykonaj następujące polecenia.lunch aosp_TARGET_ARCH-user
m -j vndk dist
Odpowiedni plik android-vndk-$(TARGET_ARCH).zip
jest tworzony w katalogu $DIST_DIR
.
Pliki migawek
Migawka VNDK zawiera następujące pliki.
- Wariant dostawcy bibliotek współdzielonych VNDK-core i VNDK-SP.
- Biblioteki współdzielone LL-NDK nie są potrzebne, ponieważ są kompatybilne wstecz.
- W przypadku celów 64-bitowych budowane i dołączane są biblioteki
TARGET_ARCH
iTARGET_2ND_ARCH
.
- Lista bibliotek VNDK-core, VNDK-SP, LL-NDK i VNDK-private znajduje się pod adresem
[vndkcore|vndksp|llndk|vndkprivate].libraries.txt
. - Pliki licencyjne.
-
module_paths.txt
. Rejestruje ścieżki modułów dla wszystkich bibliotek VNDK, co jest potrzebne do sprawdzenia, czy projekty GPL mają źródła wydane w danym drzewie źródeł Androida.
Dla danego pliku ZIP migawki VNDK, android-vndk-$(TARGET_ARCH).zip
, prekompilowane biblioteki VNDK są pogrupowane w oddzielnych katalogach o nazwach arch-$(TARGET_ARCH)-$(TARGET_ARCH_VARIANT)
zgodnie z bitowością ABI. Na przykład dla android-vndk-arm64.zip
64-bitowe biblioteki są umieszczone pod arch-arm64-armv8-a
, a 32-bitowe biblioteki są umieszczone pod arch-arm-armv8-a
. Poniższy przykład pokazuje strukturę katalogów dla pliku ZIP migawki VNDK arm64 ( TARGET_ARCH=arm64
) ( android-vndk-arm64.zip
).
Tworzenie migawek dostawców
Android 11 obsługuje migawki dostawców , które umożliwiają tworzenie vendor.img
niezależnie od wersji Androida w drzewie źródłowym. Domyślny zrzut VNDK zawiera pliki bibliotek współdzielonych ( .so
), które można zainstalować na urządzeniach, a następnie połączyć z plikami binarnymi C++ dostawcy w czasie wykonywania. Aby skompilować tę migawkę VNDK, potrzebujesz dodatkowych artefaktów, takich jak pliki nagłówkowe i wyeksportowane flagi.
Aby wygenerować takie artefakty (wraz z migawką VNDK) z lokalnego drzewa źródłowego, użyj następującego polecenia.
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true development/vndk/snapshot/build.sh
To polecenie tworzy pliki android-vndk-$(TARGET_ARCH).zip
w katalogu $DIST_DIR
. Poniższy przykład to plik ZIP migawki VNDK arm64 z artefaktami kompilacji. Pogrubione pliki to nowo dodane pliki do normalnej migawki VNDK (pokazane na rysunku 1) i zawierają pliki JSON (w których przechowywane są cflags
każdej biblioteki) oraz wszystkie wyeksportowane pliki nagłówkowe.
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
Przesyłanie migawek VNDK
Migawki VNDK są sprawdzane w drzewie źródłowym w /prebuilts/vndk/v VER
, gdzie VER
jest równe wersji migawki VNDK (która jest zgodna z wersją SDK odpowiedniej wersji Androida). Na przykład migawka VNDK systemu Android 8.1 ma wersję 27.
Korzystanie ze skryptu update.py
Skrypt update.py
( /development/vndk/snapshot/update.py
) automatyzuje proces dodawania wstępnie utworzonej migawki VNDK do drzewa źródłowego. Automatycznie wykrywa artefakty kompilacji i odpowiednio wypełnia powiązane właściwości w wygenerowanym Android.bp
. Skrypt ten wykonuje następujące zadania:
- W
/prebuilts/vndk/v VER
używarepo start
do utworzenia nowej gałęzi Git. - Pobiera i rozpakowuje artefakty kompilacji migawek VNDK.
- Uruchamia
gen_buildfiles.py
w celu automatycznego wygenerowania plików kompilacji (Android.bp
). - Uruchamia plik
check_gpl_license.py
, aby sprawdzić, czy wstępnie zbudowane biblioteki objęte licencją General Public License (GPL) mają źródła udostępnione w bieżącym drzewie źródeł. - Używa
git commit
do zatwierdzania nowych zmian.
Korzystanie z lokalnie zbudowanych migawek VNDK
Można także używać lokalnie utworzonych migawek VNDK. Jeśli określono opcję --local
, skrypt update.py
pobiera artefakty kompilacji migawki VNDK z określonego katalogu lokalnego (zamiast z serwera kompilacji systemu Android), w którym znajdują się pliki android-vndk-$(TARGET_ARCH).zip
wygenerowane w development/vndk/snapshot/build.sh
. Dzięki opcji --local
skrypt update.py
pomija kroki sprawdzania licencji GPL i git commit
.
Składnia:
python update.py VER --local local_path
Przykładowe polecenie aktualizacji migawki VNDK systemu Android 8.1 za pomocą lokalnych artefaktów kompilacji w /path/to/local/dir
:
python update.py 27 --local /path/to/local/dir
Przykładowa struktura katalogów lokalnie zbudowanej migawki 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 zbudowane z
VNDK_SNAPSHOT_BUILD_ARTIFACTS=true
.Instalowanie migawek VNDK
Obraz systemu instaluje biblioteki migawek VNDK w czasie kompilacji, korzystając z informacji z BOARD_VNDK_VERSION
, PRODUCT_EXTRA_VNDK_VERSIONS
i ro.vndk.version
. Możesz kontrolować, które migawki VNDK będą instalowane z gotowych katalogów migawek VNDK (na przykład /prebuilts/vndk/v29
lub /prebuilts/vndk/v30
), korzystając z jednej z poniższych opcji.
- Opcja 1:
BOARD_VNDK_VERSION
. Użyj modułów migawek do zbudowania bieżących modułów dostawcy i zainstaluj tylko te moduły migawek, które są wymagane dla modułów dostawcy. - Opcja 2:
PRODUCT_EXTRA_VNDK_VERSIONS
. Zainstaluj moduły migawek VNDK niezależnie od modułów bieżącego dostawcy. Spowoduje to zainstalowanie gotowych migawek VNDK wymienionych wPRODUCT_EXTRA_VNDK_VERSIONS
bez łączenia ich z innymi modułami w czasie kompilacji.
Ustawianie BOARD_VNDK_VERSION
BOARD_VNDK_VERSION
pokazuje wersję VNDK, którą muszą zbudować aktualne moduły dostawców. Jeśli BOARD_VNDK_VERSION
ma dostępną wersję migawki VNDK w katalogu /prebuilts/vndk
, zainstalowana zostanie migawka VNDK wskazana w BOARD_VNDK_VERSION
. Jeśli migawka VNDK nie jest dostępna w katalogu, wystąpi błąd kompilacji.
Zdefiniowanie BOARD_VNDK_VERSION
umożliwia także instalację modułów VNDK. Moduły dostawcy łączą się z wersją migawki VNDK zdefiniowaną w BOARD_VNDK_VERSION
w czasie kompilacji (nie powoduje to zbudowania bieżących modułów VNDK w źródle systemowym). Podczas pobierania pełnego drzewa źródeł z repozytorium zarówno źródła systemowe, jak i dostawcy są oparte na tej samej wersji Androida.
Ustawianie PRODUCT_EXTRA_VNDK_VERSIONS
PRODUCT_EXTRA_VNDK_VERSIONS
zawiera listę dodatkowych wersji VNDK do zainstalowania. Zwykle wystarczy mieć jedną migawkę VNDK dla bieżącej partycji dostawcy. Jednak w niektórych przypadkach może być konieczne umieszczenie wielu migawek w jednym obrazie systemu. Na przykład GSI ma wiele migawek umożliwiających obsługę wersji wielu dostawców za pomocą jednego obrazu systemu. Ustawiając PRODUCT_EXTRA_VNDK_VERSIONS
, możesz zainstalować moduły migawek VNDK jako dodatek do wersji VNDK w BOARD_VNDK_VERSION
.
Jeśli PRODUCT_EXTRA_VNDK_VERSIONS
ma określoną listę wersji, system kompilacji szuka wstępnie utworzonych migawek listy wersji w katalogu prebuilts/vndk
. Jeśli system kompilacji zlokalizuje wszystkie wymienione migawki, instaluje te pliki migawek w każdym VNDK APEX ( out/target/product/$(TARGET_DEVICE)/system_ext/apex/com.android.vndk.v VER
. Brakujące wersje powodują błąd kompilacji.
Moduły VNDK nie łączą się z modułami dostawcy w czasie kompilacji, ale można ich używać w czasie wykonywania, jeśli moduły dostawcy w partycji dostawcy wymagają jednej z zainstalowanych wersji VNDK. PRODUCT_EXTRA_VNDK_VERSIONS
jest ważny tylko wtedy, gdy zdefiniowano BOARD_VNDK_VERSION
.
PLATFORM_VNDK_VERSION
PLATFORM_VNDK_VERSION
definiuje wersję VNDK dla bieżących modułów VNDK w źródle systemowym. Wartość jest ustawiana automatycznie:
- Przed wydaniem
PLATFORM_VNDK_VERSION
jest ustawiona jakoPLATFORM_VERSION_CODENAME
. - W wersji
PLATFORM_SDK_VERSION
jest kopiowany doPLATFORM_VNDK_VERSION
.
Po wydaniu wersji na Androida aktualne biblioteki VNDK są instalowane w VNDK APEX ( /system/apex/com.android.vndk.v VER
), gdzie VER
to wersja przechowywana w PLATFORM_VNDK_VERSION
.
Gdy BOARD_VNDK_VERSION
jest ustawiona na current
, PLATFORM_VNDK_VERSION
jest przechowywana w ro.vndk.version
, w przeciwnym razie BOARD_VNDK_VERSION
jest przechowywana w ro.vndk.version
. PLATFORM_VNDK_VERSION
jest ustawiona na wersję SDK w momencie wydania Androida; przed wydaniem alfanumeryczna nazwa kodowa Androida jest używana dla PLATFORM_VNDK_VERSION
.
Podsumowanie ustawień wersji VNDK
Poniższa tabela podsumowuje ustawienia wersji VNDK.
Sprzedawca Zbudować | Tablica Wersja | SDK Uwolnienie | Platforma Wersja | Wersja Nieruchomość | Zainstaluj katalog |
---|---|---|---|---|---|
Aktualne moduły VNDK | current | Zanim | CODE_NAME | CODE_NAME | /system/apex/com.android.vndk.v CODE_NAME |
Po | SDK_VER | SDK_VER | /system/apex/com.android.vndk.v SDK_VER | ||
Gotowe moduły migawek | VNDK_VER dla migawki | Przed lub po | CODE_NAME lub SDK_VER | VNDK_VER | /system_ext/apex/com.android.vndk.v VNDK_VER |
- Wersja płytki (
BOARD_VNDK_VERSION
). Wersja VNDK, którą moduły dostawcy wymagają do zbudowania. Ustaw nacurrent
, jeśli moduły dostawcy mogą łączyć się z bieżącymi modułami systemu. - Wersja platformy (
PLATFORM_VNDK_VERSION
). Wersja VNDK, którą budują obecne moduły systemu. Zbudowany tylko wtedy, gdyBOARD_VNDK_VERSION
jest równy bieżącemu. - Właściwość wersji (
ro.vndk.version
). Właściwość określająca wersję VNDK, której wymagają pliki binarne i biblioteki w pliku sprzedawca.img do uruchomienia. Przechowywane wvendor.img
w/vendor/default.prop
.