Arayüze karma oluşturma işlemi uygulama

Bu belgede, HIDL arayüzüne karma oluşturma işlemi açıklanmaktadır. arayüz değişikliklerinin kapsamlı bir şekilde incelendiğinden emin olun. HIDL arayüzleri sürümlü olduğu için bu mekanizma gereklidir. Bu, bir arayüz kullanıma sunulduktan sonra, ikili uygulama arayüzünü (ABI) koruyan bir biçimde (örneğin, düzeltme) bakın.

Düzen

Her paket kök dizini (ör. android.hardware Şununla eşleşen: hardware/interfaces veya vendor.foo vendor/foo/hardware/interfaces), bir Yayınlanan tüm HIDL arayüz dosyalarını listeleyen current.txt dosyası.

# 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: Hangi karmaların geldiğini takip etmenize yardımcı olması için Google, HIDL current.txt dosyalarını farklı bölümler: İlk bölüm Android 8'de yayınlandı; sonraki bölüm Android 8 MR1'de yayınlanacak. Şunu kesinlikle öneririz: current.txt dosyanızda benzer bir düzen olacak.

hidl-gen ile karma

current.txt dosyasına manuel olarak veya hidl-gen kullanılıyor. Aşağıdaki kod snippet'i yönetmek için hidl-gen ile kullanabileceğiniz komutlar current.txt dosyası (karma işlemler 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ı: tekrar kontrol edin. Bu tür bir arayüzü değiştirirken, yeni bir karma current.txt dosyasının sonuna ekleyin. Ayrıntılı bilgi için ABI kararlılığı.

hidl-gen tarafından oluşturulan her arayüz tanımı kitaplığı şunu çağırarak alınabilecek karmaları içerir: IBase::getHashChain. hidl-gen bir arayüzünün kök dizinindeki current.txt dosyasını kontrol eder kontrol edin:

  • HAL için karma bulunmazsa arayüz yayınlanmamış olarak kabul edilir ( ve derleme devam ediyor.
  • Karmalar bulunursa mevcut arayüzle karşılaştırılarak kontrol edilir:
    • Arayüz karma ile eşleşirse derleme devam eder.
    • Arayüz bir karma ile eşleşmezse derleme durdurulur. Bu, daha önce sunulan bir arayüzün değiştirildiği anlamına gelir.
      • ABI'yi koruyan bir değişiklik için (bkz. ABI kararlılığı), current.txt dosyası derlemeye devam edebilmesi için değiştirilmesi gerekir.
      • Diğer tüm değişiklikler, kullanır.

ABI kararlılığı

ABI, bağlantılar/arama kuralları/vb. ABI veya API değişirse arayüzde ile derlenen genel bir system.img ile çalışır resmi arayüzler.

Arayüzlerin sürümlü olduğundan ve ABI'nin kararlı olduğundan emin olmak kritik önemdedir:

  • Uygulamanızın, Tedarikçi Test Paketi'ni (VTS) geçmesini sağlar. Bu test paketi, Böylece yalnızca çerçeve niteliğindeki OTA'ları yapabilirsiniz.
  • Bir OEM olarak, Google Cloud Platform'un sunduğu diğer olanaklardan yararlanan bir Yönetim Kurulu Destek Paketi (BSP) ve uyumlu hale getirebilirsiniz.
  • Bu rapor, kullanıma sunulabilecek arayüzleri takip etmenize yardımcı olur. Dikkatlice current.txt arayüzleri dizininin haritasına bakın paket kökünde sağlanan tüm arayüzlerin geçmişi ve durumu

Şu dilde zaten giriş olan bir arayüze yeni bir karma eklerken: current.txt, yalnızca kodu temsil eden karmaları ABI istikrarını koruyan arayüzler kullanır. Aşağıdaki değişiklik türlerini inceleyin:

Değişikliklere izin verildi
  • Bir yorumun değiştirilmesi (bir yöntemin anlamını değiştirmediği sürece).
  • Bir parametrenin adını değiştirme.
  • Bir dönüş parametresinin adını değiştirme.
  • Ek açıklamaları değiştirme.
Değişikliklere izin verilmiyor
  • Bağımsız değişkenleri, yöntemleri vb. yeniden sıralama
  • Bir arayüzü yeniden adlandırma veya yeni bir pakete taşıma.
  • Paketi yeniden adlandırma.
  • Bir yöntem/yapı alanı/vb. ekleme herhangi bir yerde özetlenebilir.
  • C++ vtable'ı bozacak her şey.
  • vb.