Dengan beberapa pengecualian, paket
antarmuka HIDL berada di
hardware/interfaces
atau direktori vendor/
. Tujuan
hardware/interfaces
peta tingkat teratas langsung ke
Namespace paket android.hardware
; versinya adalah subdirektori
pada namespace paket (bukan antarmuka).
Compiler hidl-gen
mengompilasi file .hal
menjadi
kumpulan file .h
dan .cpp
. Dari sini dibuat secara otomatis
{i>shared library<i} yang menjadi tujuan penautan implementasi
klien/server.
File Android.bp
yang membangun library bersama ini
dibuat secara otomatis oleh hardware/interfaces/update-makefiles.sh
{i>script<i}. Setiap kali Anda menambahkan paket baru ke hardware/interfaces
, atau
menambah/menghapus .hal
file ke/dari paket yang ada, Anda harus menjalankan kembali
skrip untuk memastikan bahwa pustaka
bersama yang dihasilkan adalah yang terbaru.
Misalnya, file contoh IFoo.hal
harus berada di
hardware/interfaces/samples/1.0
. Contoh
File IFoo.hal
membuat antarmuka IFoo di
paket sampel:
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); };
File yang dihasilkan
File yang dibuat secara otomatis dalam paket HIDL ditautkan menjadi satu file bersama
library dengan nama yang sama dengan paket (misalnya,
android.hardware.samples@1.0
). Pustaka bersama juga mengekspor
{i>header<i} tunggal, IFoo.h
, yang
dapat disertakan oleh klien dan
server web. Menggunakan compiler hidl-gen
dengan IFoo.hal
sebagai input, mode binderized memiliki
file:
Gambar 1. File yang dihasilkan oleh compiler.
IFoo.h
. MenjelaskanIFoo
murni antarmuka di class C++; berisi metode dan jenis yang didefinisikan dalam AntarmukaIFoo
dalam fileIFoo.hal
, diterjemahkan ke C++ jika diperlukan. Tidak berisi detail yang terkait dengan Mekanisme RPC (misalnya,HwBinder
) yang digunakan untuk menerapkan antarmuka ini. Class diberi namespace dengan paket dan versinya, misalnya,::android::hardware::samples::IFoo::V1_0
. Klien dan server termasuk {i>header<i} ini: Klien untuk memanggil metode padanya dan server untuk mengimplementasikan metode-metode tersebut.IHwFoo.h
. File {i>header<i} yang berisi untuk fungsi yang melakukan serialisasi tipe data yang digunakan dalam antarmuka. Developer tidak boleh menyertakan header-nya secara langsung (tidak berisi ).BpHwFoo.h
. Class yang mewarisi dariIFoo
dan menjelaskan proxyHwBinder
(sisi klien) implementasi antarmuka. Developer tidak boleh merujuk ke class ini secara langsung.BnHwFoo.h
. Class yang menyimpan referensi ke implementasiIFoo
dan menjelaskan Implementasi antarmuka stubHwBinder
(sisi server). Developer tidak boleh merujuk ke class ini secara langsung.FooAll.cpp
. Class yang berisi implementasi untuk proxyHwBinder
dan PotonganHwBinder
. Ketika klien memanggil metode antarmuka, secara otomatis melakukan marshal pada argumen dari klien dan mengirim transaksi ke driver {i>binder kernel<i}, yang mengirimkan transaksi ke stub pada sisi lain (yang kemudian memanggil implementasi server aktual).
File memiliki struktur yang mirip dengan file yang dibuat oleh
aidl-cpp
(untuk mengetahui detailnya, lihat "Mode passthrough" di
Ringkasan HiDL). Satu-satunya
file yang dihasilkan secara otomatis yang tidak bergantung pada mekanisme RPC yang digunakan oleh HIDL
IFoo.h
; semua file lainnya dikaitkan dengan mekanisme
HwBinder RPC yang digunakan
oleh HIDL. Oleh karena itu, implementasi klien dan server tidak boleh
secara langsung merujuk ke apa pun selain IFoo
. Untuk mencapai
ini, hanya sertakan IFoo.h
dan link ke file bersama yang dibuat
library.
Link ke galeri foto bersama
Klien atau server yang menggunakan antarmuka apa pun dalam sebuah paket harus menyertakan library bersama dari paket tersebut dalam satu (1) lokasi:
- Di Android.mk:
LOCAL_SHARED_LIBRARIES += android.hardware.samples@1.0
- Di Android.bp:
shared_libs: [ /* ... */ "android.hardware.samples@1.0", ],
Library tambahan yang mungkin perlu Anda sertakan:
libhidlbase |
Mencakup jenis data HIDL standar. Dimulai di Android
10, ini juga berisi semua
simbol yang sebelumnya di
libhidltransport dan
libhwbinder .
|
---|---|
libhidltransport |
Menangani pengangkutan panggilan HIDL melalui mekanisme RPC/IPC yang berbeda. Android 10 menghentikan penggunaan library ini. |
libhwbinder |
Simbol khusus binder. Android 10 akan menghentikan penggunaan library ini. |
libfmq |
IPC Antrean Pesan Cepat. |
Namespace
Fungsi dan jenis HIDL seperti Return<T>
dan
Void()
dideklarasikan dalam namespace ::android::hardware
.
Namespace C++ paket ditentukan oleh nama dan versi paket.
Misalnya, paket mypackage dengan versi 1.2 di bawah
hardware/interfaces
memiliki kualitas berikut:
- Namespace C++ adalah
::android::hardware::mypackage::V1_2
- Nama yang sepenuhnya memenuhi syarat dari
IMyInterface
dalam paket ini adalah:::android::hardware::mypackage::V1_2::IMyInterface
. (IMyInterface
adalah ID, bukan bagian dari namespace). - Types yang ditentukan dalam file
types.hal
paket diidentifikasi sebagai:::android::hardware::mypackage::V1_2::MyPackageType