Producenci urządzeń z systemem Android zmieniają kod źródłowy bibliotek AOSP z różnych powodów. Niektórzy dostawcy ponownie wdrażają funkcje w bibliotekach AOSP, aby zwiększyć wydajność, podczas gdy inni dodają nowe punkty zaczepienia, nowe interfejsy API lub nowe funkcje do bibliotek AOSP. Ta sekcja zawiera wskazówki dotyczące rozszerzania bibliotek AOSP w sposób, który nie łamie CTS/VTS.
Wymiana wpuszczana
Wszystkie zmodyfikowane biblioteki współdzielone muszą być kompatybilne z plikami binarnymi i zastępować ich odpowiedniki AOSP. Wszyscy obecni użytkownicy AOSP muszą mieć możliwość korzystania ze zmodyfikowanej biblioteki współdzielonej bez ponownej kompilacji. Z tego wymogu wynika, co następuje:
- Nie wolno usuwać funkcji AOSP.
- Konstrukcji nie wolno modyfikować, jeśli są one wystawione na ich użytkowników.
- Warunek wstępny funkcji nie może być wzmacniany.
- Funkcje muszą zapewniać równoważne funkcje.
- Post-warunek funkcji nie może być osłabiony.
Rozszerzone klasyfikacje modułów
Klasyfikuj moduły według funkcjonalności, które definiują i używają .
Uwaga : Funkcjonalności są tutaj używane zamiast API/ABI, ponieważ możliwe jest dodawanie funkcjonalności bez zmiany API/ABI.
W zależności od funkcjonalności zdefiniowanych w module, moduły można podzielić na moduł DA i moduł DX :
- Moduły Defining-only-AOSP (DA-Module) nie definiują nowych funkcjonalności, których nie było w odpowiedniku AOSP.
- Przykład 1. Nienaruszona, niezmodyfikowana biblioteka AOSP jest modułem DA.
- Przykład 2. Jeśli sprzedawca przepisuje funkcje w
libcrypto.so
za pomocą instrukcji SIMD (bez dodawania nowych funkcji), to zmodyfikowanylibcrypto.so
będzie modułem DA.
- Moduły definiujące-rozszerzające (DX-Module) albo definiują nowe funkcjonalności, albo nie mają odpowiednika AOSP.
- Przykład 1. Jeśli sprzedawca doda funkcję pomocniczą do
libjpeg.so
, aby uzyskać dostęp do niektórych danych wewnętrznych, to zmodyfikowanalibjpeg.so
będzie DX-Lib, a nowo dodana funkcja będzie rozszerzoną częścią biblioteki. - Przykład 2. Jeśli sprzedawca definiuje bibliotekę inną niż AOSP o nazwie
libfoo.so
, wtedylibfoo.so
będzie biblioteką DX-Lib.
- Przykład 1. Jeśli sprzedawca doda funkcję pomocniczą do
W zależności od funkcjonalności wykorzystywanych przez moduł, moduły można podzielić na UA-Module i UX-Module .
- Moduły using-only-AOSP (UA-Module) wykorzystują tylko funkcje AOSP w swoich implementacjach. Nie polegają na żadnych rozszerzeniach innych niż AOSP.
- Przykład 1. Nienaruszona, niezmodyfikowana biblioteka AOSP jest modułem UA.
- Przykład 2. Jeśli zmodyfikowana biblioteka współdzielona
libjpeg.so
opiera się tylko na innych API AOSP, będzie to moduł UA.
- Moduły using-Extension (UX-Module) opierają się w swoich implementacjach na niektórych funkcjach innych niż AOSP.
- Przykład 1. Jeśli zmodyfikowana
libjpeg.so
opiera się na innej bibliotece innej niż AOSP o nazwielibjpeg_turbo2.so
, to zmodyfikowanylibjpeg.so
będzie modułem UX. - Przykład 2. Jeśli sprzedawca doda nową funkcję do zmodyfikowanego
libexif.so
, a jego zmodyfikowanylibjpeg.so
użyje nowo dodanej funkcji zlibexif.so
, to jego zmodyfikowanylibjpeg.so
będzie modułem UX.
- Przykład 1. Jeśli zmodyfikowana
Definicje i zastosowania są od siebie niezależne:
Używane funkcjonalności | |||
---|---|---|---|
Tylko AOSP (UA) | Rozszerzony (UX) | ||
Zdefiniowane funkcjonalności | Tylko AOSP (DA) | DAUA | DAUX |
Rozszerzony (DX) | DXUA | DXUX |
Mechanizm rozszerzenia VNDK
Moduły dostawcy, które opierają się na rozszerzonych funkcjach, nie będą działać, ponieważ biblioteka AOSP o tej samej nazwie nie ma rozszerzonej funkcjonalności. Jeśli moduły dostawcy bezpośrednio lub pośrednio zależą od rozszerzonych funkcji, dostawcy powinni skopiować biblioteki współdzielone DAUX, DXUA i DXUX na partycję dostawcy (procesy dostawcy zawsze najpierw szukają bibliotek współdzielonych w partycji dostawcy). Jednak biblioteki LL-NDK nie mogą być kopiowane, więc moduły dostawcy nie mogą polegać na rozszerzonych funkcjach zdefiniowanych przez zmodyfikowane biblioteki LL-NDK.
Biblioteki współdzielone DAUA mogą pozostać na partycji systemowej, jeśli odpowiadająca im biblioteka AOSP może zapewnić taką samą funkcjonalność, a moduły dostawcy będą nadal działać, gdy partycja systemowa zostanie nadpisana przez ogólny obraz systemu (GSI).
Zastąpienie typu drop-in jest ważne, ponieważ niezmodyfikowane biblioteki VNDK w GSI będą łączyć się ze zmodyfikowanymi bibliotekami współdzielonymi w przypadku kolizji nazw. Jeśli biblioteki AOSP zostaną zmodyfikowane w sposób niezgodny z API/ABI, biblioteki AOSP w GSI mogą nie połączyć się lub spowodować niezdefiniowane zachowania.