Ten dokument opisuje szyfrowanie interfejsu HIDL, czyli mechanizm zapobiegający przypadkowe zmiany w interfejsie oraz upewnić się, że są one dokładnie sprawdzone. Ten mechanizm jest wymagany, ponieważ interfejsy HIDL mają wersje, co oznacza, że że po udostępnieniu interfejsu nie można go zmieniać za wyjątkiem sposób zachowania interfejsu binarnego aplikacji (ABI), np. komentarz korekta).
Układ
Każdy katalog główny pakietu (tj. mapowanie android.hardware
na
Mapowanie hardware/interfaces
lub vendor.foo
na
vendor/foo/hardware/interfaces
) musi zawierać parametr
current.txt
plik zawierający listę wszystkich udostępnionych plików interfejsu HIDL.
# current.txt files support comments starting with a '#' character # this file, for instance, would be vendor/foo/hardware/interfaces/current.txt # Each line has a SHA-256 hash followed by the name of an interface. # They have been shortened in this doc for brevity but they are # 64 characters in length in an actual current.txt file. d4ed2f0e...995f9ec4 vendor.awesome.foo@1.0::IFoo # comments can also go here # types.hal files are also noted in current.txt files c84da9f5...f8ea2648 vendor.awesome.foo@1.0::types # Multiple hashes can be in the file for the same interface. This can be used # to note how ABI sustaining changes were made to the interface. # For instance, here is another hash for IFoo: # Fixes type where "FooCallback" was misspelled in comment on "FooStruct" 822998d7...74d63b8c vendor.awesome.foo@1.0::IFoo
Uwaga: aby ułatwić sobie określenie, które hasze są stosowane
Następnie Google dzieli pliki HIDL current.txt
na różne
Sekcje: pierwsza sekcja jest wydana w Androidzie 8. następna sekcja
otrzyma Androida 8 MR1. Zdecydowanie zalecamy użycie
podobny układ do pliku current.txt
.
Hasz za pomocą algorytmu hidl-gen
Hasz możesz dodać do pliku current.txt
ręcznie lub przez
za pomocą: hidl-gen
. Ten fragment kodu zawiera przykłady
poleceń, których możesz używać wraz z hidl-gen
do zarządzania
current.txt
plik (hasze zostały skrócone):
hidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::types
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::typeshidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfchidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types 07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallbackhidl-gen -L hash -r vendor.awesome:vendor/awesome/hardware/interfaces -r android.hardware:hardware/interfaces -r android.hidl:system/libhidl/transport vendor.awesome.nfc@1.0 >> vendor/awesome/hardware/interfaces/current.txt
Ostrzeżenie: nie zastępuj skrótu dla elementu
z udostępnionego wcześniej interfejsu. Przy zmianie takiego interfejsu dodaj nowy hasz
na końcu pliku current.txt
. Więcej informacji:
Stabilność interfejsu ABI.
Każda biblioteka definicji interfejsu wygenerowana przez hidl-gen
zawiera hasze, które można pobrać, wywołując
IBase::getHashChain
Gdy hidl-gen
kompiluje plik
sprawdza plik current.txt
w katalogu głównym
Aby sprawdzić, czy kod HAL uległ zmianie:
- Jeśli nie zostanie znaleziony skrót HAL, interfejs jest uznawany za nieopublikowany (w prac programistycznych) i kompilacji.
- Po znalezieniu haszy zostaną one sprawdzone w porównaniu z obecnym interfejsem:
- Jeśli interfejs odpowiada haszowi, kompilacja będzie kontynuowana.
- Jeśli interfejs nie odpowiada haszowi, kompilacja jest zatrzymana, ponieważ oznacza to zmianę wcześniej opublikowanego interfejsu.
- Aby uzyskać zmianę z zachowaniem interfejsu ABI (zobacz
stabilność ABI), plik
current.txt
, musi zostać zmodyfikowany przed kontynuacją kompilacji. - Wszystkie inne zmiany należy wprowadzać w ramach uaktualnienia do wersji podrzędnej lub głównej za pomocą prostego interfejsu online.
- Aby uzyskać zmianę z zachowaniem interfejsu ABI (zobacz
stabilność ABI), plik
Stabilność ABI
Interfejs ABI zawiera plik binarny
powiązania, konwencje wywołań itp. Jeśli interfejs ABI lub API ulegnie zmianie, nie będzie
działa dłużej z ogólnym system.img
, który został skompilowany z
z oficjalnych interfejsów.
Zapewnienie obsługi wersji interfejsów oraz stabilnego interfejsu ABI kluczowe z kilku powodów:
- Zapewnia, że implementacja przechodzi testy Vendor Test Suite (VTS), na dobrej drodze do tego, że będziesz mieć możliwość tworzenia OTA w ramach działania platformy.
- Jako producent OEM możesz zapewnić pakiet pomocy BSP, który jest są łatwe w użyciu i zgodne z zasadami.
- Pomaga śledzić, które interfejsy można udostępnić. Rozważ
current.txt
mapę katalogu interfejsów umożliwiające wyświetlanie historię i stan wszystkich interfejsów w katalogu głównym pakietu.
Podczas dodawania nowego skrótu dla interfejsu, który ma już wpis w
current.txt
, dodaj tylko hasze, które reprezentują
dla interfejsów zapewniających stabilność interfejsu ABI. Zapoznaj się z tymi typami zmian:
Zmiany dozwolone |
|
---|---|
Zmiany są niedozwolone |
|