Projekt zrzutów VNDK

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}

Rysunek 1. Uaktualnianie tylko systemu

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:

Rysunek 2. Architektura zrzutów VNDK

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, gdzie 28 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.