Obraz systemu może używać zrzutów VNDK do uzyskania poprawnego z bibliotek do obrazów dostawców, nawet jeśli obrazy systemu i dostawców są skompilowane na podstawie różnych wersji Androida. Tworzenie zrzutu VNDK wymaga przechwycenia Biblioteki VNDK jako zrzut i oznaczanie ich numerem wersji. obraz dostawcy może być powiązany z określoną wersją VNDK z wymaganymi interfejsami ABI dla modułów na obrazie dostawcy. Jednak w ramach tej samej wersji VNDK biblioteki VNDK muszą być Stabilny interfejs ABI.
Projekt zrzutów VNDK obejmuje metody generowanie wstępnie kompiluje zrzut VNDK z bieżącego obrazu systemu instalowanie te gotowe biblioteki na partycję systemową w nowszej wersji Androida.
Informacje o bibliotekach VNDK
HAL-HAL wprowadzony w Android 8.0 umożliwia oddzielne uaktualnienia partycji systemu i dostawcy. VNDK definiuje zbiory bibliotek (VNDK-core, VNDK-SP i LL-NDK), które kod dostawcy może tworzy powiązanie z bibliotekami, które nie znajdują się w VNDK, oraz uniemożliwia dostawcom korzystanie z tych bibliotek ustawiony. W efekcie obraz dostawcy można skompilować i uruchomić, jeśli odpowiedni pakiet VNDK w obrazie systemu są przesyłane do obrazu dostawcy.
Rdzeń VNDK
Zestaw bibliotek z rdzeniem VNDK jest zainstalowany w
/system/lib[64]/vndk-${VER}
i jest dostępny
tylko w przypadku procesów dostawcy o poziomie interfejsu API równym
${VER}
Procesy systemowe nie mogą korzystać z tych bibliotek i muszą
użyj bibliotek zainstalowanych w /system/lib[64]
. Ponieważ
rygorystycznego ograniczenia przestrzeni nazw dla każdego procesu, biblioteki rdzeni VNDK
są bezpieczne przed podwójnym ładowaniem.
Aby dołączyć bibliotekę do rdzeni VNDK, dodaj do
Android.bp
:
vendor_available: true, vndk: { enabled: true, },
VNDK-SP,
Biblioteki VNDK-SP są instalowane w regionie /system/lib[64]/vndk-sp-${VER}
i są dostępne dla procesów dostawcy i systemowych (za pośrednictwem SP-HAL),
biblioteki zainstalowane na partycji dostawcy). Biblioteki VNDK-SP mogą być
są automatycznie wczytywane.
Aby dołączyć bibliotekę do VNDK-SP, do Android.bp
dodaj:
vendor_available: true, vndk: { enabled: true, support_system_process: true, },
LL-NDK
Biblioteki LL-NDK są instalowane w regionie /system/lib[64]
. Moduły dostawcy
można użyć biblioteki skróconej LL-NDK, aby uzyskać dostęp do wstępnie wybranych symboli LL-NDK
biblioteki. Biblioteki LL-NDK muszą być zgodne wstecznie i stabilne w interfejsie ABI
włącz używanie nowych wersji bibliotek LL-NDK w starszych wersjach modułów dostawców.
Ze względu na stabilne działanie ABI modelu LL-NDK zrzut VNDK
nie trzeba dodawać bibliotek LL-NDK dla starych obrazów dostawców.
Informacje o zrzutach VNDK
Android 8.1 zawiera VNDK biblioteki utworzone na podstawie kodu źródłowego. Jednak w przyszłych wersjach na Androida, każda wersja VNDK musi zostać przechwycona jako zrzut i przesłana jako wstępną kompilację, aby umożliwić połączenie ze starszym obrazem dostawcy.
Począwszy od Androida 9, nowe wersje Androida będą
dołącz co najmniej jeden zrzut katalogów VNDK-core i VNDK-SP starszych
w kodzie źródłowym Androida. W momencie kompilacji wymagane zrzuty będą
zainstalowano na urządzeniach z systemem /system/lib[64]/vndk-${VER}
oraz
/system/lib[64]/vndk-sp-${VER}
(katalogi, których może używać
partycji dostawcy), gdzie ${VER}
to zmienna ciągu znaków, która
reprezentuje nazwę wersji zrzutu VNDK.
Biblioteki zrzutów VNDK mogą się różnić w zależności od wersji VNDK, dlatego pakiet VNDK
zawiera również konfiguracje przestrzeni nazw tagu łączącego zainstalowane jako
etc/ld.config.${VER}.txt
,
/etc/llndk.libraries.${VER}.txt
i
/etc/vndksp.libraries.${VER}.txt
Przykład: uaktualnienie systemu i dostawcy obrazy
Zrzut nie jest wymagany. kompilacja bez dodatkowych konfiguracji dla VNDK zrzuty ekranu.
Przykład: uaktualnianie tylko obrazu systemu
Musi zawierać pliki konfiguracji przestrzeni nazw VNDK i tagu łączącego dla
i obraz dostawcy w obrazie systemu. Pliki konfiguracji przestrzeni nazw tagu łączącego
są automatycznie skonfigurowane do wyszukiwania bibliotek VNDK w
/system/lib[64]/vndk-${VER}
i
/system/lib[64]/vndk-sp-${VER}
![](https://source.android.com/static/docs/core/architecture/images/vndk_snapshot_system_only.png?authuser=1&hl=pl)
Przykład: uaktualnienie obrazu systemu, drobna zmiana obrazu dostawcy
Tworzenie obrazu dostawcy na podstawie zrzutu VNDK nie jest jeszcze obsługiwane, więc musi skompilować obraz dostawcy oddzielnie za pomocą oryginalnego kodu źródłowego, a następnie zaktualizuj obraz systemu w sposób opisany w poprzednim przykładzie.
Architektura zrzutów VNDK
Aby obraz systemu Android 9 był zgodny z urządzeniem Obraz dostawcy Androida 8.1, zrzut VNDK zgodny z Androidem 8.1 wraz z systemem Android 9 należy przesyłać zdjęcie dostawcy. obraz systemu:
![](https://source.android.com/static/docs/core/architecture/images/vndk_snapshot_arch.png?authuser=1&hl=pl)
Projekt zrzutów VNDK obejmuje następujące metody:
- Generowanie zrzutu dla rdzeni VNDK i VNDK-SP
. Android 9 zawiera skrypt
Za pomocą tej metody można wykonać zrzut bieżącej kompilacji VNDK. Ten skrypt obejmuje wszystkie
biblioteki w językach:
/system/lib[64]/vndk-28
i/system/lib[64]/vndk-sp-28
, które zostały utworzone z obecnymi źródła jako zrzut VNDK, gdzie28
to wersja VNDK Android 9. Zrzut zawiera też tag łączący pliki konfiguracji przestrzeni nazw/etc/ld.config.28.txt
,/etc/llndk.libraries.28.txt
i/etc/vndksp.libraries.28.txt
Zostanie użyty wygenerowany zrzut z nowszymi wersjami Androida (wyższymi niż 9). - Instalowanie gotowych bibliotek VNDK-core i VNDK-SP ze środowiska
. W Androidzie 9 zrzut VNDK zawiera
zestaw gotowych bibliotek z rdzeniem VNDK i zbiorem bibliotek VNDK-SP, a także
jako pliki konfiguracji przestrzeni nazw tagu łączącego. Gdy podasz listę VNDK
wersje zrzutu ekranu do zainstalowania, podczas kompilacji, instalacja obrazu systemu
biblioteki zrzutów VNDK do
/system/lib[64]/vndk-${VER}
oraz katalogi i tagi łączące/system/lib[64]/vndk-sp-${VER}
plików konfiguracji przestrzeni nazw dla tych zrzutów VNDK Katalog/etc
.
Obsługa wersji VNDK
Każda wersja Androida ma tylko jeden zrzut VNDK, a wersja pakietu SDK jest używana jako
wersję VNDK (co oznacza, że wersja VNDK zawiera liczbę całkowitą, na przykład 27
w przypadku Androida 8.1). Wersja VNDK jest naprawiana, gdy wersja Androida to
został zwolniony. Zachowywana jest wersja VNDK używana przez partycję dostawcy
automatycznie we właściwości ro.vndk.version
, która może być odczytywana
w czasie działania aplikacji. Ta wersja jest następnie używana do identyfikowania wersji VNDK dostawcy
dla niektórych bibliotek i określając wersję zrzutu VNDK dla przestrzeni nazw
konfiguracji.
Tworzenie bibliotek VNDK
Polecenie make vndk
tworzy biblioteki, które zawierają vndk:
{ enabled: true, … }
, w tym zależności i przestrzeń nazw
plików konfiguracji. Jeśli skonfigurowano ustawienie BOARD_VNDK_VERSION := current
,
które są tworzone za pomocą polecenia make
.
Ponieważ ta kompilacja nie instaluje bibliotek VNDK ze zrzutu, zainstalowane biblioteki VNDK nie są stabilne przy użyciu interfejsu ABI. Jeśli jednak wersja Androida zostanie poprawiony interfejs ABI dla bieżącej wersji VNDK. W tym momencie każdy Uszkodzenie interfejsu ABI jest błędem kompilacji, dlatego poprawki do wersji Androida nie mogą interfejsu ABI bibliotek VNDK.