Rozszerzenia VNDK

Producenci urządzeń z Androidem zmieniają kod źródłowy bibliotek AOSP z różnych powodów. Niektórzy dostawcy ponownie wdrażają funkcje w bibliotekach AOSP, aby poprawić wydajność, podczas gdy inni dostawcy dodadzą nowe punkty zaczepienia, nowe interfejsy API i funkcje bibliotek AOSP. Ta sekcja zawiera wytyczne rozszerzanie bibliotek AOSP w sposób, który nie powoduje uszkodzenia CTS/VTS.

Wpuszczana

Wszystkie zmodyfikowane biblioteki udostępnione muszą być zgodne z plikami binarnymi, zamienników w serwisie bezdotykowym ich odpowiednika w AOSP. Wszystkie istniejące Użytkownicy AOSP muszą mieć możliwość korzystania ze zmodyfikowanej biblioteki udostępnionej bez ponowne kompilacje. To wymaganie oznacza, że:

  • Funkcji AOSP nie można usuwać.
  • Nie wolno zmieniać konstrukcji, jeśli są one narażone na użytkowników.
  • Nie można wzmocnić warunku wstępnego funkcji.
  • Funkcje muszą zawierać równoważne funkcje.
  • Warunek POST funkcji nie może być osłabiony.

Rozszerzone klasyfikacje modułów

Moduły można klasyfikować według zdefiniowanych funkcji. korzystania z nich.

Uwaga: tutaj używane są funkcje. zamiast interfejsu API/ABI, ponieważ można dodawać nowe funkcje bez dowolnego interfejsu API lub interfejsu ABI.

W zależności od funkcji zdefiniowanych w module, modułów można dodawać sklasyfikowany jako DA-Module i DX-Module:

  • Defining-only-AOSP Modules (DA-Module) nie definiuje nowych modułów funkcji, których nie ma w wersji AOSP.
    • Przykład 1. Niezmodyfikowana, niezmodyfikowana biblioteka AOSP jest Moduł analizy danych.
    • Przykład 2. Jeśli dostawca przekonwertuje funkcje w libcrypto.so z instrukcjami do karty SIMD (bez dodawania nowej) funkcji), zmodyfikowany element libcrypto.so będzie modułem DA.
  • Defining-Extension Modules (DX-Module) definiuje nowy element funkcji lub nie mają odpowiednika AOSP.
    • Przykład 1. Jeśli dostawca doda funkcję pomocniczą do libjpeg.so, aby uzyskać dostęp do niektórych danych wewnętrznych, a następnie zmodyfikowane libjpeg.so będzie wersją DX-Lib, a nowo dodana funkcja będzie co dłuższa część biblioteki.
    • Przykład 2. Jeśli dostawca zdefiniował bibliotekę inną niż AOSP o nazwie libfoo.so, potem libfoo.so będzie DX-Lib.

W zależności od funkcji wykorzystywanych w modułach można klasyfikować moduły do UA-Module i UX-Module.

  • Korzystanie z modułów AOSP (tylko moduł UA-Module) wykorzystuje wyłącznie funkcje AOSP. w ich implementacjach. Nie korzystają z żadnych rozszerzeń innych niż AOSP.
    • Przykład 1. Niezmodyfikowana, niezmodyfikowana biblioteka AOSP to UA.
    • Przykład 2. Jeśli zmodyfikowano bibliotekę udostępnioną libjpeg.so korzysta tylko z innych interfejsów API AOSP, będzie to moduł UA.
  • Moduły używające rozszerzeń (UX-Module) korzystają z modułów innych niż AOSP. funkcje w ich implementacjach.
    • Przykład 1. Jeśli zmodyfikowany element libjpeg.so wymaga funkcji bibliotekę inną niż AOSP o nazwie libjpeg_turbo2.so, a następnie zmodyfikowany libjpeg.so będzie modułem UX.
    • Przykład 2. Jeśli dostawca doda nową funkcję do zmodyfikowanej Komponent libexif.so i jego zmodyfikowany element libjpeg.so używają nowo dodanej funkcji z tabeli libexif.so, a następnie jej zmodyfikowanej libjpeg.so będzie modułem UX.

Definicje i zastosowania są od siebie niezależne:

Używane funkcje
Tylko AOSP (UA) Rozszerzony (UX)
Zdefiniowane funkcje Tylko AOSP (DA) DAUA, użytkownicy dziennie
Rozszerzony (DX) DXUA, DXUX

Mechanizm rozszerzenia VNDK

Moduły dostawców, które bazują na funkcjach rozszerzonych, nie będą działać, ponieważ Biblioteka AOSP o tej samej nazwie nie ma rozszerzonych funkcji. Jeśli bezpośrednio lub pośrednio zależą od rozszerzonych funkcji, dostawcy powinni skopiować biblioteki udostępnione DAUX, DXUA i DXUX do dostawcy partycja (procesy dostawcy zawsze szukają bibliotek udostępnionych u dostawcy najpierw partycjonowanie). Nie należy jednak kopiować bibliotek LL-NDK, dlatego dostawca moduły nie mogą korzystać z rozszerzonych funkcji zdefiniowanych przez Biblioteki LL-NDK.

Biblioteki udostępnione DAUA mogą pozostać na partycji systemowej, jeśli odpowiednia biblioteka AOSP może oferować tę samą funkcjonalność i dostawcę, Moduły nadal będą działać, gdy partycja systemowa zostanie zastąpiona przez Obraz systemu (GSI).

Zastępowanie metodą upuszczania jest ważne, ponieważ niezmodyfikowane biblioteki VNDK w W przypadku kolizji nazw GSI połączy się ze zmodyfikowanymi bibliotekami udostępnionymi. Jeśli Biblioteki AOSP są modyfikowane w sposób niezgodny z interfejsem API/ABI. lub biblioteką w GSI.