HIDL arayüz paketleri birkaç istisna dışında
hardware/interfaces
veya vendor/
dizini. İlgili içeriği oluşturmak için kullanılan
hardware/interfaces
üzerinde doğrudan
android.hardware
paket ad alanı; bu sürüm bir alt dizindir
altında.
hidl-gen
derleyicisi, .hal
dosyalarını
.h
ve .cpp
dosyalarından oluşan bir grup. Otomatik olarak oluşturulan bu öğelerden
dosyaları, istemci/sunucu uygulamalarının bağlantı oluşturduğu paylaşılan bir kitaplık oluşturur.
Bu paylaşılan kitaplığı oluşturan Android.bp
dosyası:
hardware/interfaces/update-makefiles.sh
tarafından otomatik olarak oluşturuldu
komut dosyası. hardware/interfaces
hizmetine her yeni paket eklediğinizde veya
mevcut pakete .hal
dosya eklemek/mevcut paketi kaldırmak için dosyayı yeniden çalıştırmanız gerekiyor
komut dosyasını kontrol edin.
Örneğin, IFoo.hal
örnek dosyası şu konumda olmalıdır:
hardware/interfaces/samples/1.0
. Örnek
IFoo.hal
dosyası,
samples paketi:
package android.hardware.samples@1.0; interface IFoo { struct Foo { int64_t someValue; handle myHandle; }; someMethod() generates (vec<uint32_t>); anotherMethod(Foo foo) generates (int32_t ret); };
Oluşturulan dosyalar
Bir HIDL paketindeki otomatik olarak oluşturulan dosyalar, paylaşılan tek bir dosyaya bağlanır
paketle aynı ada sahip bir kitaplık (örneğin,
android.hardware.samples@1.0
) bilgileri gösterilir. Paylaşılan kitaplık ayrıca
tek bir başlık, IFoo.h
. Bu üstbilgi, müşterilerin
sunucular. hidl-gen
derleyicisini IFoo.hal
ile kullanma
bir giriş olarak arayüz dosyası olarak, bağlamalı modda aşağıdaki otomatik oluşturulan
dosyalar:
Şekil 1. Derleyici tarafından oluşturulan dosyalar.
IFoo.h
SafIFoo
tanımı C++ sınıfında bir arayüz oluşturun; burada belirtilen yöntem ve türleri içerir:IFoo.hal
dosyasındakiIFoo
arayüzü, C++ diline çevrildi veya başka tür belgeler kullanabilirsiniz. Şununla ilgili ayrıntıları içermez: Bu arayüzü uygulamak için kullanılan TBG mekanizması (örneğin,HwBinder
). Sınıf, paket ve sürümle ad alanına sahiptir. Örneğin,::android::hardware::samples::IFoo::V1_0
İstemciler ve sunucular bu üstbilgiyi ekleyin: Ondaki çağrı yöntemleri için istemciler ve bu yöntemleri uygulamaktır.IHwFoo.h
Şunu içeren başlık dosyası: arayüzde kullanılan veri türlerini serileştiren işlevler için bildirimler sağlar. Geliştiriciler başlığını hiçbir zaman doğrudan eklememelidir (herhangi bir için geçerlidir).BpHwFoo.h
Devralan bir sınıfIFoo
veHwBinder
proxy'sini (istemci tarafı) açıklar ve arayüzün uygulanmasıdır. Geliştiriciler bu sınıfa hiçbir zaman bakmamalıdır doğrudan ekleyebilirsiniz.BnHwFoo.h
Şu hedefe sahip bir sınıf: birIFoo
uygulamasına atıfta bulunuyor ve ArayüzünHwBinder
saplama (sunucu tarafı) uygulaması. Geliştiriciler hiçbir zaman doğrudan bu sınıfa başvurmamalıdır.FooAll.cpp
Şunu içeren bir sınıf: hemHwBinder
proxy'si hem deHwBinder
saplama. Bir istemci bir arayüz yöntemini çağırdığında, proxy İstemciden gelen bağımsız değişkenleri otomatik olarak belirler ve işlemi gönderir bağlayıcı çekirdek sürücüsüne gönderilir. Bu da işlemi (bu durumda gerçek sunucu uygulamasını çağırır).
Dosyalar, Google Cloud Platform tarafından oluşturulan
aidl-cpp
(ayrıntılar için "Geçiş modu" bölümüne bakın:
HIDL'ye Genel Bakış). Tek
HIDL tarafından kullanılan RPC mekanizmasından bağımsız olan otomatik oluşturulmuş dosya
IFoo.h
; diğer tüm dosyalar kullanılan HwBinder RPC mekanizmasına bağlıdır
hazırlayan: HIDL Bu nedenle, istemci ve sunucu uygulamaları hiçbir zaman
IFoo
dışındaki öğelere doğrudan referansta bulunması gerekir. Hedef
buna, yalnızca IFoo.h
ekleyin ve oluşturulan paylaşılan içeriğe bağlantı verin
kitaplığını açar.
Paylaşılan kitaplıkların bağlantısı
Paketteki herhangi bir arayüzü kullanan bir istemci veya sunucu aşağıdakilerin bir (1) tanesinde söz konusu paketin paylaşılan kitaplığı yerler:
- Android.mk'de:
LOCAL_SHARED_LIBRARIES += android.hardware.samples@1.0
- Android.bp'de:
shared_libs: [ /* ... */ "android.hardware.samples@1.0", ],
Eklemeniz gerekebilecek diğer kitaplıklar:
libhidlbase |
Standart HIDL veri türlerini içerir. Android'de başlatılıyor
10. Bu liste, daha önce
libhidltransport ve
libhwbinder .
|
---|---|
libhidltransport |
HIDL çağrılarının farklı RPC/IPC mekanizmaları üzerinden taşınmasını yönetir. Android 10 bu kitaplığı kullanımdan kaldırıyor. |
libhwbinder |
Birleştiriciye özel simgeler. Android 10 bu kitaplığı kullanımdan kaldırır. |
libfmq |
Fast Message Queue IPC (Hızlı Mesaj Sırası IPC). |
Ad alanları
Return<T>
ve gibi HIDL işlevleri ve türleri
Void()
, ::android::hardware
ad alanında tanımlandı.
Bir paketin C++ ad alanı, paket adına ve sürümüne göre belirlenir.
Örneğin, altında sürüm 1.2 olan bir mypackage paketi
hardware/interfaces
şu niteliklere sahiptir:
- C++ ad alanı
::android::hardware::mypackage::V1_2
IMyInterface
adlı kuruluşun tam adı paket:::android::hardware::mypackage::V1_2::IMyInterface
. (IMyInterface
, ad alanının parçası değil, bir tanımlayıcıdır).- Paketin
types.hal
dosyasında tanımlanan türler şu şekilde tanımlanır:::android::hardware::mypackage::V1_2::MyPackageType