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 elementlibcrypto.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 zmodyfikowanelibjpeg.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
, potemlibfoo.so
będzie DX-Lib.
- Przykład 1. Jeśli dostawca doda funkcję pomocniczą do
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 nazwielibjpeg_turbo2.so
, a następnie zmodyfikowanylibjpeg.so
będzie modułem UX. - Przykład 2. Jeśli dostawca doda nową funkcję do zmodyfikowanej
Komponent
libexif.so
i jego zmodyfikowany elementlibjpeg.so
używają nowo dodanej funkcji z tabelilibexif.so
, a następnie jej zmodyfikowanejlibjpeg.so
będzie modułem UX.
- Przykład 1. Jeśli zmodyfikowany element
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.