VNDK (Vendor Native Development Kit) wymaga wprowadzenia kilku zmian w bazie kodu, aby rozdzielić między dostawcą a systemem. Skorzystaj z tego przewodnika, aby włączyć VNDK u dostawcy/OEM bazy kodu.
Kompilowanie bibliotek systemowych
System kompilacji zawiera kilka typów obiektów, w tym biblioteki (udostępniane, statyczne lub nagłówek) i binarne.
Rysunek 1. Kompilowanie bibliotek systemowych.
- Biblioteki
core
są używane przez obraz systemu w tym obrazie. Te bibliotekvendor
,vendor_available
nie może używaćvndk
lubvndk-sp
biblioteki.cc_library { name: "libThatIsCore", ... }
- Biblioteki
vendor-only
(lubproprietary
) są używane przez na jego obrazie.cc_library { name: "libThatIsVendorOnly", proprietary: true, # or: vendor: true, # (for things in AOSP) ... }
- Obraz dostawcy używany przez
vendor_available
biblioteki obraz (może zawierać duplikaty:core
).cc_library { name: "libThatIsVendorAvailable", vendor_available: true, ... }
- Obraz dostawcy w obrazie systemu używa bibliotek
vndk
.cc_library { name: "libThatIsVndk", vendor_available: true, vndk: { enabled: true, } ... }
- Biblioteki
vndk-sp
są używane przez obraz dostawcy oraz przez obraz systemu pośrednio.cc_library { name: "libThatIsVndkSp", vendor_available: true, vndk: { enabled: true, support_system_process: true, } ... }
- Biblioteki
llndk
są używane przez obrazy systemu i dostawców.cc_library { name: "libThatIsLlndk", llndk: { symbol_file: "libthatisllndk.map.txt" } ... }
Gdy lib jest oznaczony jako vendor_available:true
, jest tworzony
dwa razy:
- Raz dla platformy (i tym samym zainstalowano ją w
/system/lib
) - Raz dla dostawcy (i tym samym zainstalowany w
/vendor/lib
lub VNDK APEX)
Wersje libs dostawców są tworzone za pomocą dodatku -D__ANDROID_VNDK__
.
Komponenty systemu prywatnego, które mogą się znacznie zmienić w przyszłych wersjach
Android jest wyłączony z tą flagą. Dodatkowo różne biblioteki eksportują plik
inny zestaw nagłówków (np. liblog
). Opcje specyficzne dla
wariant dostawcy środowiska docelowego można określić w pliku Android.bp
w:
target: { vendor: { … } }
Włącz VNDK dla bazy kodu
Aby włączyć VNDK dla bazy kodu:
- Określ, czy się kwalifikujesz, obliczając wymagane rozmiary
Partycje:
vendor.img
isystem.img
. - Włącz
BOARD_VNDK_VERSION=current
. Możesz dodać doBoardConfig.mk
lub bezpośrednio utwórz za jego pomocą komponenty (np.m -j BOARD_VNDK_VERSION=current MY-LIB
).
Po włączeniu BOARD_VNDK_VERSION=current
system kompilacji
egzekwuje poniższe wymagania dotyczące zależności i nagłówka.
Zarządzaj zależnościami
Obiekt vendor
, który zależy od komponentu core
który nie istnieje w vndk
ani jako obiekt vendor
musisz rozwiązać za pomocą jednej z tych opcji:
- Zależność można usunąć.
- Jeśli komponent
core
należy do domenyvendor
, może być oznaczony jakovendor_available
lubvendor
. - Zmiana powodująca, że podstawowy obiekt jest częścią obiektu
vndk
, do Google.
Ponadto, jeśli komponent core
ma zależności od
vendor
, komponent vendor
musi być utworzony
w komponencie core
lub zależność musi
usunięte w inny sposób (na przykład przez usunięcie zależności lub przeniesienie
w komponencie vendor
).
Zarządzaj nagłówkami
Aby system kompilacji miał dostęp do informacji, musisz usunąć zależności globalnych nagłówków
czy tworzyć nagłówki z elementem -D__ANDROID_VNDK__
czy bez niego.
Na przykład nagłówki libutils, takie jak utils/StrongPointer.h
, mogą
są nadal dostępne za pomocą biblioteki nagłówków
libutils_headers
Niektórych nagłówków (takich jak unistd.h
) nie można już uwzględniać w trybie przejściowym
ale mogą być uwzględniane lokalnie.
Na koniec część publiczna (private/android_filesystem_config.h
)
został przeniesiony do cutils/android_filesystem_config.h
. Do zarządzania
wykonaj jedną z następujących czynności:
- Usuń zależność do
private/android_filesystem_config.h
, zastępując wszystkie MakraAID_*
zgetgrnam
/getpwnam
połączeń, jeśli to możliwe. Na przykład:(uid_t)AID_WIFI
zmienia się wgetpwnam("wifi")->pw_uid
(gid_t)AID_SDCARD_R
zmienia się wgetgrnam("sdcard_r")->gr_gid
private/android_filesystem_config.h
- W przypadku AIS zakodowanego na stałe dołącz
cutils/android_filesystem_config.h