Paketler

.

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:

Dosyalar
derleyici tarafından oluşturuldu

Şekil 1. Derleyici tarafından oluşturulan dosyalar.

  • IFoo.h Saf IFoo tanımı C++ sınıfında bir arayüz oluşturun; burada belirtilen yöntem ve türleri içerir: IFoo.hal dosyasındaki IFoo 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ıf IFoo ve HwBinder 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: bir IFoo uygulamasına atıfta bulunuyor ve Arayüzün HwBinder 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: hem HwBinder proxy'si hem de HwBinder 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.

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