Bir VINTF nesnesi, aygıt bildiriminden ve çerçeve bildirim dosyalarından (XML) verileri toplar. Her iki manifest de bir formatı paylaşır, ancak tüm öğeler her ikisi için de geçerli değildir (şema hakkında ayrıntılar için bkz. Manifest file schema ).
Cihaz bildirimi
Cihaz bildirimi (cihaz tarafından sağlanır), satıcı bildirimi ve ODM bildiriminden oluşur.
- Satıcı bildirimi, bir SoC için ortak olan HAL'leri, SELinux ilke sürümlerini vb. belirtir. Android kaynak ağacına
device/ VENDOR / DEVICE /manifest.xml
adresinde yerleştirilmesi önerilir, ancak birden çok parça dosyası kullanılabilir. Ayrıntılar için bkz. Parçaları bildir ve Parçalardan DM oluştur . - ODM bildirimi, ODM bölümündeki ürüne özgü HAL'leri listeler. VINTF nesnesi, ODM bildirimini şu sırayla yükler:
-
SKU
tanımlanmışsa (buradaSKU
,ro.boot.product.hardware.sku
özelliğinin değeridir),/odm/etc/vintf/manifest_ SKU .xml
-
/odm/etc/vintf/manifest.xml
-
SKU
tanımlanmışsa,/odm/etc/manifest_ SKU .xml
-
/odm/etc/manifest.xml
-
- Satıcı bildirimi, satıcı bölümündeki ürüne özel HAL'leri listeler. VINTF nesnesi, satıcı bildirimini şu sırayla yükler:
-
SKU
tanımlanmışsa (buradaSKU
,ro.boot.product.vendor.sku
özelliğinin değeridir),/vendor/etc/vintf/manifest_ SKU .xml
-
/vendor/etc/vintf/manifest.xml
-
- VINTF nesnesi, aygıt bildirimini şu sırayla yükler:
- Satıcı bildirimi varsa, aşağıdakileri birleştirin:
- Satıcı manifestosu
- İsteğe bağlı satıcı bildirim parçaları
- İsteğe bağlı ODM bildirimi
- İsteğe bağlı ODM bildirim parçaları
- Aksi takdirde, ODM bildirimi varsa, ODM bildirimini isteğe bağlı ODM bildirim fragmanlarıyla birleştirin.
-
/vendor/manifest.xml
(eski, parça yok)
Dikkat:
- Eski cihazlarda, eski satıcı bildirimi ve ODM bildirimi kullanılır. ODM bildirimi, eski satıcı bildirimini tamamen geçersiz kılabilir.
- Android 9 ile başlatılan cihazlarda ODM bildirimi, satıcı bildirimi ile birleştirilir.
- Bir bildirim listesi birleştirildiğinde, sonraki bildirimdeki etiketlerin
override="true"
özniteliğine sahip olması koşuluyla, listede daha sonra görünen bildirimler listede daha önce görünen bildirimlerdeki etiketleri geçersiz kılabilir. Örneğin, ODM bildirimi, satıcı bildirimindeki bazı<hal>
etiketlerini geçersiz kılabilir. Aşağıdaki öznitelikoverride
belgelerine bakın.
- Satıcı bildirimi varsa, aşağıdakileri birleştirin:
Bu kurulum, aynı panoya sahip birden çok ürünün aynı satıcı görüntüsünü (ortak HAL'ler sağlar) paylaşmasına, ancak farklı ODM görüntülerine (ürüne özel HAL'ler belirten) sahip olmasına olanak tanır.
İşte örnek bir satıcı bildirimi.
<?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>
İşte bir örnek ODM bildirimi.
<?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>
İşte bir OTA paketindeki örnek bir cihaz bildirimi.
<?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>
Daha fazla ayrıntı için Aygıt Bildirimi Geliştirme bölümüne bakın.
Çerçeve bildirimi
Çerçeve bildirim dosyası, sistem bildirimi, ürün bildirimi ve system_ext bildiriminden oluşur.
- Sistem bildirimi (Google tarafından sağlanır) manuel olarak oluşturulur ve
/system/libhidl/manifest.xml
adresindeki Android kaynak ağacında bulunur. - Ürün bildirimi (aygıt tarafından sağlanır), ürün bölümünde kurulu modüller tarafından hizmet verilen HAL'leri listeler.
- system_ext bildirimi (cihaz tarafından sağlanır) aşağıdakileri listeler:
- system_ext bölümünde kurulu modüller tarafından hizmet verilen HAL'ler;
- VNDK sürümleri;
- Sistem SDK sürümü.
Aygıt bildirimine benzer şekilde, birden çok parça dosyası kullanılabilir. Ayrıntılar için bkz. Manifest fragmanları .
İşte örnek bir çerçeve bildirimi.
<?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>
tezahür parçaları
Android 10 ve sonraki sürümlerde, bir bildirim girişini derleme sistemindeki bir HAL modülüyle ilişkilendirebilirsiniz. Bu, HAL modülünün yapı sistemine koşullu olarak dahil edilmesini kolaylaştırır.
Örnek
Android.bp
veya Android.mk
dosyanızda herhangi bir modüle vintf_fragments
ekleyin. Örneğin, modülü HAL uygulamanızla değiştirebilirsiniz ( my.package.foo@1.0-service-bar
).
... { ... vintf_fragments: ["manifest_foo.xml"], ... }tutucu5 l10n-yer
LOCAL_MODULE := ... LOCAL_VINTF_FRAGMENTS := manifest_foo.xml
manifest_foo.xml
adlı bir dosyada, bu modül için bildirimi oluşturun. Derleme zamanında, bu bildirim cihaza eklenir. Buraya bir giriş eklemek, cihazın ana bildirimine bir giriş eklemekle aynıdır. Bu, istemcilerin arabirimi kullanmasına ve VTS'nin aygıtta hangi HAL uygulamalarının olduğunu belirlemesine olanak tanır. Normal bir manifestonun yaptığı her şeyi, bu manifesto da yapar.
Aşağıdaki örnek, vendor
veya odm
bölümüne yüklenen android.hardware.foo@1.0::IFoo/default
uygular. system
, product
veya system_ext
bölümüne kuruluysa, device
türü yerine framework
türünü kullanın.
<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>
Manifest dosya şeması
Bu bölüm, bu XML etiketlerinin anlamını açıklar. Bazı "gerekli" etiketler, Android kaynak ağacındaki kaynak dosyada eksik olabilir ve derleme sırasında assemble_vintf
tarafından yazılabilir. Cihazdaki ilgili dosyalarda gerekli etiketler bulunmalıdır.
-
?xml
- İsteğe bağlı. Yalnızca XML ayrıştırıcısına bilgi sağlar.
-
manifest.version
- Gerekli. Bu bildirimin meta versiyonu. Bildirimde beklenen öğeleri açıklar. XML sürümüyle ilgisiz.
-
manifest.type
- Gerekli. Bu manifestonun türü. Aygıt bildirim dosyası için değer
device
veframework
bildirim dosyası için çerçeveye sahiptir. -
manifest.target-level
- Aygıt bildirimi için gerekli. Bu cihaz bildiriminin uyumlu olması hedeflenen çerçeve uyumluluk matrisi (FCM) sürümünü belirtir. Buna cihazın nakliye FCM versiyonu da denir.
-
manifest.hal
- İsteğe bağlı, tekrar edebilir.
format
özniteliğine bağlı olarak tek bir HAL (HIDL veya GL gibi yerel). -
manifest.hal.format
- İsteğe bağlı. Değer şunlardan biri olabilir:
-
hidl
: HIDL HAL'ler. Bu varsayılandır. -
aidl
: AIDL HAL'leri . Yalnızca manifest meta sürüm 2.0 ve üzeri sürümlerde geçerlidir. -
native
: Yerel HAL'ler.
-
-
manifest.hal.max-level
- İsteğe bağlı. Yalnızca çerçeve bildirimlerinde geçerlidir. Ayarlanırsa, çerçeve bildiriminde maksimum düzeyi Hedef FCM Sürümünden daha düşük olan HAL'ler devre dışı bırakılır.
-
manifest.hal.override
- İsteğe bağlı. Değer şunlardan biri olabilir:
-
true
: Aynı<name>
ve ana sürüme sahip diğer<hal>
öğelerini geçersiz kılın. Bu<hal>
öğesinde<version>
veya<fqname>
yoksa,<hal>
hal> öğesi bu HAL'nin devre dışı bırakıldığını bildirir. -
false
: Aynı<name>
ve ana sürüme sahip diğer<hal>
öğelerini geçersiz kılmayın.
-
-
manifest.hal.name
- Gerekli. HAL'nin tam nitelikli paket adı. Birden çok HAL girişi aynı adı kullanabilir. Örnekler:
-
android.hardware.camera
(HIDL veya AIDL HAL) -
GLES
(yerel HAL, yalnızca ad gerektirir)
-
-
manifest.hal.transport
-
manifest.hal.format == "hidl"
olduğunda gereklidir. Aksi halde mevcut OLMAMALIDIR. Servis yöneticisinden bu paketten bir arayüz sorgulandığında hangi taşımanın kullanıldığını belirtir. Değer şunlardan biri olabilir:-
hwbinder
: Ciltlenmiş mod -
passthrough
: Geçiş modu
-
-
manifest.hal.format == "aidl"
olduğunda isteğe bağlıdır. Aksi halde mevcut OLMAMALIDIR. Bir arabirime uzaktan hizmet verildiğinde hangi aktarımın kullanıldığını belirtir. Değer şu şekilde olmalıdır:-
inet
: Giriş soketi
manifest.hal.transport.ip
vemanifest.hal.transport.port
kullanılmalıdır. -
-
manifest.hal.transport.arch
-
hwbinder
passthrough
mevcut olmamalıdır. Sağlanan geçiş hizmetinin bitliğini açıklar. Değer şunlardan biri olabilir:-
32
: 32 bit modu -
64
: 64 bit modu -
32+64
: Her ikisi de
-
-
manifest.hal.transport.ip
-
inet
için gereklidir ve aksi halde mevcut OLMAMALIDIR. Uzak arabirime hizmet verilen IP adresini tanımlar. -
manifest.hal.transport.port
-
inet
için gereklidir ve aksi halde mevcut OLMAMALIDIR. Uzak arabirime hizmet verilen bağlantı noktasını tanımlar. -
manifest.hal.version
- İsteğe bağlı, tekrar edebilir. Bir bildirimdeki
hal
etiketleri için bir sürüm.
HIDL ve yerel HAL'ler için biçimMAJOR . MINOR
. Örnekler içinhardware/interfaces
,vendor/${VENDOR}/interfaces
,frameworks/hardware/interfaces
veyasystem/hardware/interfaces
bakın.
HIDL ve yerel HAL'ler, sağlanan ana sürüm başına yalnızca bir küçük sürümle, farklı ana sürümleri temsil ettikleri sürece birden çok sürüm alanı kullanabilir. Örneğin, 3.1 ve 3.2 bir arada var olamaz, ancak 1.0 ve 3.4 olabilir. Bu,override="true"
olmadıkça, aynı ada sahip tümhal
öğeleri için geçerlidir.<version>
değerleri<fqname>
ile ilişkilendirilmez çünkü<fqname>
bir sürüm taşır.
AIDL HAL'leri için, Android 11 ve önceki sürümleri çalıştıran cihazlarda<version>
bulunmamalıdır.<version>
, Android 12 ve sonraki sürümleri çalıştıran cihazlarda tek bir tam sayı olmalıdır. Her(package, interface, instance)
tanımlama grubu için en fazla bir<version>
olmalıdır. Mevcut değilse, varsayılan olarak1
. Bir<fqname>
bir sürüm taşımadığından,<version>
değeri aynı<hal>
içindeki tüm<fqname>
ile ilişkilendirilir. -
manifest.hal.interface
- Gerekli, kopya olmadan tekrar edebilir. Örnek adı olan pakette bir arabirim belirtin. Bir
<hal>
içinde birden çok<interface>
öğesi olabilir; isimleri ayrı olmalıdır. -
manifest.hal.interface.name
- Gerekli. Arayüzün adı.
-
manifest.hal.interface.instance
- Gerekli, tekrar edilebilir. Arabirimin örnek adı. Bir arabirim için birden çok örneğe sahip olabilir ancak yinelenen
<instance>
öğesi olamaz. -
manifest.hal.fqname
- İsteğe bağlı, tekrar edebilir.
manifest.hal.name
adıyla HAL için bir örnek belirtmenin alternatif bir yolu.- HIDL HAL'ler için biçim
@ MAJOR . MINOR :: INTERFACE / INSTANCE
. - AIDL HAL'leri için biçim
INTERFACE / INSTANCE
şeklindedir.
- HIDL HAL'ler için biçim
-
manifest.sepolicy
- Gerekli. Sepolicy ile ilgili tüm girdileri içerir.
-
manifest.sepolicy.version
- Aygıt bildirimi için gerekli. SELinux sürümünü bildirir.
SDK_INT . PLAT_INT
. -
manifest.vendor-ndk
- Gerekli, tekrar edebilir; çerçeve manifestosu için gereklidir. Aygıt bildiriminde bulunmamalıdır. Birden çok
<vendor-ndk>
girişinin farklı<version>
s'leri olmalıdır. Çerçeve tarafından sağlanan bir dizi VNDK anlık görüntüsünü açıklar. -
manifest.vendor-ndk.version
- Gerekli. Bu, VNDK anlık görüntüsünün sürümünü temsil eden pozitif bir tamsayıdır.
-
manifest.vendor-ndk.library
- İsteğe bağlı, yineleme olmadan tekrar edilebilir. Bu VNDK satıcı anlık görüntüsü için çerçeve tarafından sağlanan bir dizi VNDK kitaplığını açıklar. Değer, bir kitaplığın dosya adıdır, örneğin
libjpeg.so
,lib
öneki ve.so
soneki dahil. Hiçbir yol bileşenine izin verilmez. -
manifest.system-sdk.version
- İsteğe bağlı, yineleme olmadan tekrar edebilir; yalnızca çerçeve bildirimi tarafından kullanılır. Çerçeve tarafından satıcı uygulamalarına sağlanan bir dizi sistem SDK sürümünü açıklar.
-
manifest.kernel
- İsteğe bağlı. Çekirdekle ilgili statik bilgileri açıklar.
-
manifest.kernel.target-level
- İsteğe bağlı. Çekirdek dalını açıklar. Değeri, mevcut değilse, varsayılan olarak
manifest.target-level
.manifest.target-level
değerinden büyük veya eşit olmalıdır. Ayrıntılar için çekirdek eşleşme kurallarına bakın.