Bu belgede, kazara arayüz değişikliklerini önleyen ve arayüz değişikliklerinin kapsamlı bir şekilde incelenmesini sağlayan bir mekanizma olan HIDL arayüz karması açıklanmaktadır. Bu mekanizma gereklidir çünkü HIDL arayüzleri sürümlendirilmiştir; bu, bir arayüz yayınlandıktan sonra Uygulama İkili Arayüzü (ABI) koruma yöntemi (yorum düzeltmesi gibi) dışında değiştirilmemesi gerektiği anlamına gelir.
Düzen
Her paket kök dizini (yani hardware/interfaces
ile android.hardware
eşlemesi veya vendor/foo/hardware/interfaces
ile vendor.foo
eşlemesi), yayımlanan tüm HIDL arayüz dosyalarını listeleyen bir current.txt
dosyası içermelidir.
# 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
Not: Google, hangi karmaların nereden geldiğini izlemeye yardımcı olmak için HIDL current.txt
dosyalarını farklı bölümlere ayırır: İlk bölüm Android O'da yayınlandı ; bir sonraki bölüm Android O MR1'de yayınlanacak . current.txt
dosyanızda benzer bir düzen kullanmanızı önemle tavsiye ederiz.
Hidl-gen ile karma oluşturma
current.txt
dosyasına manuel olarak veya hidl-gen
kullanarak karma ekleyebilirsiniz. Aşağıdaki kod parçacığı, current.txt
dosyasını yönetmek için hidl-gen
ile kullanabileceğiniz komutların örneklerini sağlar (karma değerleri kısaltılmıştır):
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
Uyarı: Daha önce yayınlanmış bir arayüzün karmasını değiştirmeyin. Böyle bir arayüzü değiştirirken current.txt
dosyasının sonuna yeni bir karma ekleyin. Ayrıntılar için ABI kararlılığı konusuna bakın.
hidl-gen
tarafından oluşturulan her arayüz tanımı kitaplığı, IBase::getHashChain
çağrılarak alınabilecek karma değerleri içerir. hidl-gen
bir arayüz derlerken, HAL'in değişip değişmediğini görmek için HAL paketinin kök dizinindeki current.txt
dosyasını kontrol eder:
- HAL için herhangi bir karma bulunamazsa, arayüz yayınlanmamış (geliştirilme aşamasında) kabul edilir ve derleme devam eder.
- Karmaların bulunması durumunda bunlar mevcut arayüze göre kontrol edilir:
- Arayüz karma değeriyle eşleşiyorsa derleme devam eder.
- Arayüz bir karma değeriyle eşleşmezse derleme durdurulur; çünkü bu, daha önce yayımlanan bir arayüzün değiştirildiği anlamına gelir.
- ABI'yi koruyan bir değişiklik için (bkz. ABI kararlılığı ), derlemenin devam edebilmesi için
current.txt
dosyasının değiştirilmesi gerekir. - Diğer tüm değişiklikler, arayüzün küçük veya büyük sürüm yükseltmesinde yapılmalıdır.
- ABI'yi koruyan bir değişiklik için (bkz. ABI kararlılığı ), derlemenin devam edebilmesi için
ABI istikrarı
Bir Uygulama İkili Arayüzü (ABI), ikili bağlantıları/çağrı kurallarını/vb. içerir. ABI/API değişirse arayüz artık resmi arayüzlerle derlenen genel system.img
dosyasıyla çalışmaz.
Arayüzlerin versiyonlandığından ve ABI'nin kararlı olduğundan emin olmak birkaç nedenden dolayı çok önemlidir :
- Uygulamanızın Satıcı Test Paketini (VTS) geçebilmesini sağlar ve bu da sizi yalnızca çerçeve OTA'ları yapabilme yolunda ilerletir.
- Bir OEM olarak, kullanımı basit ve uyumlu bir Anakart Destek Paketi (BSP) sağlamanıza olanak tanır.
- Hangi arayüzlerin yayınlanabileceğini takip etmenize yardımcı olur.
current.txt
dosyasını, bir paket kökünde sağlanan tüm arayüzlerin geçmişini ve durumunu görmenize olanak tanıyan bir arayüzler dizininin haritasını düşünün.
current.txt
dosyasında zaten girişi olan bir arayüz için yeni bir karma eklerken, yalnızca ABI kararlılığını koruyan arayüzleri temsil eden karmaları eklediğinizden emin olun. Aşağıdaki değişiklik türlerini inceleyin:
İzin verilen değişiklikler |
|
---|---|
Değişikliklere izin verilmiyor |
|