Objek VINTF menggabungkan data dari file manifes perangkat dan manifes framework (XML). Kedua manifes memiliki format yang sama, meskipun tidak semua elemen berlaku untuk keduanya (untuk detail skema, lihat Skema file manifes).
Manifes perangkat
Manifes perangkat (disediakan oleh perangkat) terdiri dari manifes vendor dan manifes ODM.
- Manifes vendor menentukan HAL, versi kebijakan SELinux, dll. yang umum untuk SoC. Manifes
direkomendasikan untuk ditempatkan di hierarki sumber Android di
device/VENDOR/DEVICE/manifest.xml, tetapi beberapa file fragmen dapat digunakan. Untuk mengetahui detailnya, lihat Fragmen manifes dan Membuat DM dari fragmen.
- Manifes ODM mencantumkan HAL khusus untuk produk di
  partisi ODM.
  Objek VINTF memuat manifes ODM dalam urutan ini:
  - Jika SKUditentukan (denganSKUadalah nilai propertiro.boot.product.hardware.sku),/odm/etc/vintf/manifest_SKU.xml
- /odm/etc/vintf/manifest.xml
- Jika SKUditentukan,/odm/etc/manifest_SKU.xml
- /odm/etc/manifest.xml
 
- Jika 
- Manifes vendor mencantumkan HAL khusus untuk produk di partisi vendor.
  Objek VINTF memuat manifes vendor dalam urutan ini:
  - Jika SKUditentukan (denganSKUadalah nilai propertiro.boot.product.vendor.sku),/vendor/etc/vintf/manifest_SKU.xml
- /vendor/etc/vintf/manifest.xml
 
- Jika 
- Objek VINTF memuat manifes perangkat dalam urutan ini:
  - Jika manifes vendor ada, gabungkan hal berikut:
      - Manifes vendor
- Fragmen manifes vendor opsional
- Manifes ODM opsional
- Fragmen manifes ODM opsional
 
- Atau, jika manifes ODM ada, gabungkan manifes ODM dengan fragmen manifes ODM opsional.
- /vendor/manifest.xml(lama, tanpa fragmen)
- Terakhir, gabungkan fragmen manifes dari APEX vendor mana pun. Fragmen manifes
      dimuat dari direktori etc/vintfsetiap APEX (misalnya,/apex/<apex name>/etc/vintf).
 Perhatikan bahwa: - Di perangkat lama, manifes vendor lama dan manifes ODM digunakan. Manifes ODM dapat sepenuhnya mengganti manifes vendor lama.
- Pada perangkat yang diluncurkan dengan Android 9, manifes ODM digabungkan dengan manifes vendor.
- Saat menggabungkan daftar manifes, manifes yang muncul di daftar berikutnya dapat mengganti
      tag dalam manifes yang muncul di daftar sebelumnya, asalkan tag dalam manifes
      berikutnya memiliki atribut override="true". Misalnya, manifes ODM dapat mengganti beberapa tag<hal>dari manifes vendor. Lihat dokumentasi untuk atributoverridedi bawah.
 
- Jika manifes vendor ada, gabungkan hal berikut:
      
Penyiapan ini memungkinkan beberapa produk dengan board yang sama untuk berbagi gambar vendor yang sama (yang menyediakan HAL umum) tetapi memiliki image ODM yang berbeda (yang menentukan HAL khusus produk).
Berikut adalah contoh manifes vendor.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="2.0" type="device" target-level="1"> <hal> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.4</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> <instance>proprietary/0</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <version>1.0</version> <version>2.0</version> <interface> <name>INfc</name> <instance>nfc_nci</instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <transport>hwbinder</transport> <fqname>@2.0::INfc/default</fqname> </hal> <hal> <name>android.hardware.drm</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ICryptoFactory</name> <instance>default</instance> </interface> <interface> <name>IDrmFactory</name> <instance>default</instance> </interface> <fqname>@1.1::ICryptoFactory/clearkey</fqname> <fqname>@1.1::IDrmFactory/clearkey</fqname> </hal> <hal format="aidl"> <name>android.hardware.light</name> <version>1</version> <fqname>ILights/default</fqname> </hal> <hal format="aidl"> <name>android.hardware.power</name> <version>2</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <hal format="native"> <name>GLES</name> <version>1.1</version> <version>2.0</version> <version>3.0</version> </hal> <sepolicy> <version>25.0</version> </sepolicy> </manifest>
Berikut adalah contoh manifes ODM.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device"> <!-- camera 3.4 in vendor manifest is ignored --> <hal override="true"> <name>android.hardware.camera</name> <transport>hwbinder</transport> <version>3.5</version> <interface> <name>ICameraProvider</name> <instance>legacy/0</instance> </interface> </hal> <!-- NFC is declared to be disabled --> <hal override="true"> <name>android.hardware.nfc</name> <transport>hwbinder</transport> </hal> <hal> <name>android.hardware.power</name> <transport>hwbinder</transport> <version>1.1</version> <interface> <name>IPower</name> <instance>default</instance> </interface> </hal> </manifest>
Berikut adalah contoh manifes perangkat dalam paket OTA.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="device" target-level="1"> <!-- hals ommited --> <kernel version="4.4.176"> <config> <key>CONFIG_ANDROID</key> <value>y</value> </config> <config> <key>CONFIG_ARM64</key> <value>y</value> </config> <!-- other configs ommited --> </kernel> </manifest>
Untuk mengetahui detail selengkapnya, lihat Pengembangan Manifes Perangkat.
Manifes framework
File manifes framework terdiri dari manifes sistem, manifes produk, dan manifes system_ext.
- 
    Manifes sistem (disediakan oleh Google) dibuat secara manual dan
    berada di hierarki sumber Android di
    /system/libhidl/manifest.xml.
- Manifes produk (disediakan oleh perangkat) mencantumkan HAL yang dilayani oleh modul yang diinstal di partisi produk.
- 
    Manifes system_ext (disediakan oleh perangkat) mencantumkan hal berikut:
    - HAL yang dilayani oleh modul yang diinstal di partisi system_ext;
- Versi VNDK;
- Versi SDK sistem.
 
Serupa dengan manifes perangkat, beberapa file fragmen dapat digunakan. Untuk mengetahui detailnya, lihat Fragmen manifes.
Berikut adalah contoh manifes framework.
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <manifest version="1.0" type="framework"> <hal> <name>android.hidl.allocator</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <transport arch="32+64">passthrough</transport> <version>1.0</version> <interface> <name>IMapper</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.manager</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.frameworks.sensorservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <hal max-level="5"> <name>android.frameworks.schedulerservice</name> <transport>hwbinder</transport> <version>1.0</version> <interface> <name>ISchedulingPolicyService</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </manifest>
Fragmen manifes
Di Android 10 dan yang lebih tinggi, Anda dapat mengaitkan entri manifes dengan modul HAL di sistem build. Hal ini memudahkan penyertaan modul HAL secara kondisional dalam sistem build.
Contoh
    Dalam file Android.bp atau Android.mk, tambahkan
    vintf_fragments ke modul apa pun yang diinstal secara eksplisit
    di perangkat, seperti cc_binary atau rust_binary.
    Misalnya, Anda dapat mengubah modul dengan penerapan HAL
    (my.package.foo@1.0-service-bar).
  
... { ... vintf_fragments: ["manifest_foo.xml"], ... }
LOCAL_MODULE := ... LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
    Dalam file bernama manifest_foo.xml, buat manifes untuk
    modul ini. Pada waktu build, manifes ini ditambahkan ke perangkat. Menambahkan
    entri di sini sama dengan menambahkan entri di manifes utama perangkat.
    Hal ini memungkinkan klien menggunakan antarmuka dan memungkinkan VTS mengidentifikasi implementasi HAL
    yang ada di perangkat. Manifes ini juga melakukan apa pun yang dilakukan manifes biasa.
  
    Contoh di bawah ini mengimplementasikan
    android.hardware.foo@1.0::IFoo/default, yang diinstal ke
    partisi vendor atau odm. Jika diinstal ke
    partisi system, product, atau system_ext, gunakan jenis
    framework, bukan
    jenis device.
  
<manifest version="1.0" type="device"> <hal format="hidl"> <name>android.hardware.foo</name> <transport>hwbinder</transport> <fqname>@1.0::IFoo/default</fqname> </hal> </manifest>
    Jika modul HAL dikemas dalam APEX vendor,
    kemas fragmen VINTF terkait dalam APEX yang sama dengan prebuilt_etc seperti
    yang dijelaskan dalam fragmen VINTF.
  
Skema file manifes
Bagian ini menjelaskan arti tag XML ini. Beberapa tag "required"
dapat tidak ada dari file sumber dalam hierarki sumber Android dan ditulis oleh
assemble_vintf
pada waktu build. Tag yang diperlukan harus ada dalam file yang sesuai di
perangkat.
- ?xml
- Opsional. Hanya memberikan informasi ke parser XML.
- manifest.version
- Wajib diisi. Meta-versi manifes ini. Menjelaskan elemen yang diharapkan dalam manifes. Tidak terkait dengan versi XML.
- manifest.type
- Wajib diisi. Jenis manifes ini. File ini memiliki nilai deviceuntuk file manifes perangkat danframeworkuntuk file manifes framework.
- manifest.target-level
- Wajib untuk manifes perangkat. Menentukan versi matriks kompatibilitas (FCM) framework yang ditargetkan untuk kompatibel dengan manifes perangkat ini. Versi ini juga disebut versi FCM pengiriman perangkat.
- manifest.hal
- Opsional, dapat diulang. Satu HAL (HIDL atau native, seperti GL),
bergantung pada atribut format.
- manifest.hal.format
- Opsional. Nilainya dapat berupa salah satu dari:
 - hidl: HIDL HAL. Ini adalah defaultnya.
- aidl: HAL AIDL. Hanya valid pada meta-versi manifes 2.0 dan yang lebih baru.
- native: HAL native.
 
- manifest.hal.max-level
- Opsional. Hanya valid pada manifes framework. Jika ditetapkan, HAL dengan level maksimum yang lebih rendah dari Versi FCM Target dalam manifes framework akan dinonaktifkan.
- manifest.hal.override
- Opsional. Nilainya dapat berupa salah satu dari:
 - true: Ganti elemen- <hal>lainnya dengan- <name>dan versi utama yang sama. Jika tidak ada- <version>atau- <fqname>dalam elemen- <hal>ini, elemen- <hal>akan mendeklarasikan HAL ini untuk dinonaktifkan.
- false: Jangan ganti elemen- <hal>lain dengan- <name>dan versi utama yang sama.
 
- manifest.hal.name
- Wajib diisi. Nama paket yang sepenuhnya memenuhi syarat dari HAL. Beberapa entri HAL dapat menggunakan
nama yang sama. Contoh:
 - android.hardware.camera(HIDL atau AIDL HAL)
- GLES(HAL native, hanya memerlukan nama)
 
- manifest.hal.transport
- Wajib ada saat manifest.hal.format == "hidl". Jika tidak, tidak boleh ada. Menentukan transpor yang digunakan saat antarmuka dari paket ini dikueri dari pengelola layanan. Nilainya dapat berupa salah satu dari:- hwbinder: Mode binderized
- passthrough: Mode passthrough
 
- Opsional jika manifest.hal.format == "aidl". Jika tidak, tidak boleh ada. Menentukan transpor yang digunakan saat antarmuka ditayangkan secara jarak jauh. Nilainya harus:- inet: Soket inet
 manifest.hal.transport.ipdanmanifest.hal.transport.portharus digunakan untuk menentukan informasi koneksi Inet lebih lanjut.
- manifest.hal.transport.arch
- Wajib untuk passthroughdan tidak boleh ada untukhwbinder. Menjelaskan bit layanan passthrough yang disediakan. Nilainya dapat berupa salah satu dari:- 32: Mode 32-bit
- 64: Mode 64-bit
- 32+64: Keduanya
 
- manifest.hal.transport.ip
- Wajib untuk inetdan TIDAK boleh ada jika tidak. Menjelaskan alamat IP tempat antarmuka jarak jauh ditayangkan.
- manifest.hal.transport.port
- Wajib untuk inetdan TIDAK boleh ada jika tidak. Menjelaskan port tempat antarmuka jarak jauh ditayangkan.
- manifest.hal.version
- Opsional, dapat diulang. Versi untuk tag haldalam manifes.
 Untuk HIDL dan HAL native, formatnya adalahMAJOR.MINOR. Untuk contoh, lihathardware/interfaces,vendor/${VENDOR}/interfaces,frameworks/hardware/interfaces, atausystem/hardware/interfaces.
 HIDL dan HAL native dapat menggunakan beberapa kolom versi selama mewakili versi utama yang berbeda, dengan hanya satu versi minor per versi utama yang disediakan. Misalnya, 3.1 dan 3.2 tidak dapat berdampingan, tetapi 1.0 dan 3.4 dapat. Hal ini berlaku untuk semua elemenhaldengan nama yang sama, kecualioverride="true". Nilai<version>tidak dikaitkan dengan<fqname>karena<fqname>membawa versi.
 Untuk HAL AIDL,<version>tidak boleh ada di perangkat yang menjalankan Android 11 dan yang lebih lama.<version>harus berupa bilangan bulat tunggal di perangkat yang menjalankan Android 12 dan yang lebih baru. Maksimal harus ada satu<version>untuk setiap tuple(package, interface, instance). Jika tidak ada, setelan defaultnya adalah1. Nilai<version>dikaitkan dengan semua<fqname>dalam<hal>yang sama karena<fqname>tidak memiliki versi.
- manifest.hal.interface
- Wajib, dapat diulang tanpa duplikat. Nyatakan antarmuka dalam
paket yang memiliki nama instance. Dapat ada beberapa
elemen <interface>dalam<hal>; nama harus berbeda.
- manifest.hal.interface.name
- Wajib diisi. Nama antarmuka.
- manifest.hal.interface.instance
- Wajib, dapat diulang. Nama instance antarmuka. Dapat memiliki beberapa
instance untuk antarmuka, tetapi tidak ada elemen <instance>duplikat.
- manifest.hal.fqname
- Opsional, dapat diulang. Cara alternatif untuk menentukan instance untuk HAL
dengan nama manifest.hal.name.- Untuk HAL HIDL, formatnya adalah
@MAJOR.MINOR::INTERFACE/INSTANCE.
- Untuk HAL AIDL, formatnya adalah
INTERFACE/INSTANCE.
 
- Untuk HAL HIDL, formatnya adalah
- manifest.sepolicy
- Wajib diisi. Berisi semua entri terkait sepolicy.
- manifest.sepolicy.version
- Wajib untuk manifes perangkat. Mendeklarasikan versi SELinux. File ini memiliki
format SDK_INT.PLAT_INT.
- manifest.vendor-ndk
- Wajib, dapat diulang; diperlukan untuk manifes framework. Tidak boleh ada
dalam manifes perangkat. Beberapa entri <vendor-ndk>harus memiliki<version>yang berbeda. Menjelaskan serangkaian snapshot VNDK yang disediakan oleh framework.
- manifest.vendor-ndk.version
- Wajib diisi. Ini adalah bilangan bulat positif yang mewakili versi snapshot VNDK.
- manifest.vendor-ndk.library
- Opsional, dapat diulang, tanpa duplikat. Menjelaskan kumpulan library VNDK
yang disediakan oleh framework untuk snapshot vendor VNDK ini. Nilainya adalah
nama file library, misalnya libjpeg.so, termasuk awalanlibdan akhiran.so. Tidak ada komponen jalur yang diizinkan.
- manifest.system-sdk.version
- Opsional, dapat diulang, tanpa duplikat; hanya digunakan oleh manifes framework. Menjelaskan serangkaian versi SDK sistem yang disediakan oleh framework untuk aplikasi vendor.
- manifest.kernel
- Opsional. Menjelaskan informasi statis tentang kernel.
- manifest.kernel.target-level
- Opsional. Menjelaskan cabang kernel. Nilainya ditetapkan secara default ke
manifest.target-leveljika tidak ada. Harus lebih besar dari atau sama denganmanifest.target-level. Lihat aturan pencocokan kernel untuk mengetahui detailnya.