Arayüz Hashingi

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::types
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::INfc
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc
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
9626fd18...f9d298a6 vendor.awesome.nfc@1.0::types
07ac2dc9...11e3cf57 vendor.awesome.nfc@1.0::INfc
f2fe5442...72655de6 vendor.awesome.nfc@1.0::INfcClientCallback
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 >> 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 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
  • Bir yorumu değiştirmek (bu, bir yöntemin anlamını değiştirmediği sürece).
  • Bir parametrenin adının değiştirilmesi.
  • Bir dönüş parametresinin adını değiştirme.
  • Ek açıklamaları değiştirme.
Değişikliklere izin verilmiyor
  • Argümanları, yöntemleri vb. yeniden sıralamak…
  • Bir arayüzü yeniden adlandırma veya onu yeni bir pakete taşıma.
  • Bir paketi yeniden adlandırma.
  • Arayüzün herhangi bir yerine bir yöntem/yapı alanı/vb. eklemek.
  • C++ vtable'ını bozacak herhangi bir şey.
  • vesaire..