Bu dokümanda, yanlışlıkla arayüz değişikliklerini önlemek ve arayüz değişikliklerinin ayrıntılı bir şekilde incelenmesini sağlamak için kullanılan bir mekanizma olan HIDL arayüz karma oluşturma işlemi açıklanmaktadır. HIDL arayüzleri sürümlere sahip olduğundan bu mekanizma gereklidir. Yani bir arayüz yayınlandıktan sonra, uygulama ikili arayüzü (ABI) korunacak şekilde (ör. yorum düzeltmesi) değiştirilmemelidir.
Düzen
Her paket kök dizini (ör. android.hardware
ile hardware/interfaces
eşleme veya vendor.foo
ile vendor/foo/hardware/interfaces
eşleme), yayınlanan 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 karma oluşturma işlemlerinin nereden geldiğini takip etmenize yardımcı olmak için HIDL current.txt
dosyalarını farklı bölümlere ayırır: İlk bölüm Android 8'de yayınlandı; sonraki bölüm Android 8 MR1'de yayınlandı olacaktır. 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 oluşturma işlemi ekleyebilirsiniz. Aşağıdaki kod snippet'inde, current.txt
dosyasını yönetmek için hidl-gen
ile kullanabileceğiniz komutlara örnekler verilmiştir (karma oluşturma işlemleri 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. Bu tür bir arayüzü değiştirirken current.txt
dosyasının sonuna yeni bir karma oluşturma kodu ekleyin. Ayrıntılar için ABI kararlılığı başlıklı makaleyi inceleyin.
hidl-gen
tarafından oluşturulan her arayüz tanımı kitaplığı, IBase::getHashChain
çağrılarak alınabilen karma oluşturma işlemleri içerir. hidl-gen
bir arayüz derlediğinde, HAL'ın değiştirilip değiştirilmediğini görmek için HAL paketinin kök dizininde bulunan current.txt
dosyasını kontrol eder:
- HAL için karma oluşturma bulunamazsa arayüz yayınlanmamış (geliştirme aşamasında) olarak kabul edilir ve derleme işlemi devam eder.
- Bulunan karma oluşturma işlemleri mevcut arayüzle karşılaştırılır:
- Arayüz karmasıyla eşleşirse derleme devam eder.
- Arayüz bir karma oluşturma ile eşleşmezse daha önce yayınlanmış bir arayüzün değiştirildiği anlamına geldiği için derleme durdurulur.
- ABI'yi koruyan bir değişiklik için (ABI kararlılığı bölümüne bakın) 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 bir sürüm yükseltmesinde yapılmalıdır.
- ABI'yi koruyan bir değişiklik için (ABI kararlılığı bölümüne bakın) derlemenin devam edebilmesi için
ABI kararlılığı
ABI, ikili bağlantıları/çağrı kuralları vb. içerir. ABI veya API değişirse arayüz artık resmi arayüzlerle derlenmiş genel bir system.img
ile çalışmaz.
Arayüzlerin sürümlendirildiğinden ve ABI'nin kararlı olduğundan emin olmak birkaç nedenden dolayı çok önemlidir:
- Uygulamanızın Tedarikçi Testi Paketi'ni (VTS) geçebilmesini sağlar. Bu sayede yalnızca çerçeveyle OTA yapabilme yolunda ilerleyebilirsiniz.
- OEM olarak, kullanımı kolay ve uyumlu bir Kart Destek Paketi (BSP) sunmanıza olanak tanır.
- Hangi arayüzlerin yayınlanabileceğini takip etmenize yardımcı olur.
current.txt
, bir paket kökünde sağlanan tüm arayüzlerin geçmişini ve durumunu görmenizi sağlayan bir arayüz dizininin haritası olarak düşünülebilir.
current.txt
'te 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 türde değişiklikleri inceleyin:
Değişikliklere izin verilir |
|
---|---|
Değişikliklere izin verilmiyor |
|