manifestolar

A VINTF nesne veriler toplar cihaz bildiriminde ve çerçeve bildirim dosyaları (XML). Her iki manifestolar değil tüm unsurları hem uygulanır rağmen (şema ile ilgili ayrıntılar için, bkz bir format paylaşan Bildiri dosyası şema ).

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. O zaman Android kaynak ağacında yerleştirilmesi tavsiye edilir device/ VENDOR / DEVICE /manifest.xml , ancak birden çok parça dosyaları kullanılabilir. Ayrıntılar için bkz Manifest parçaları ve fragmanlardan DM oluşturun .
  • Ürüne ODM bildirim listeleri HAL'lere belirli ODM bölümü . VINTF nesnesi, ODM bildirimini şu sırayla yükler:
    1. Eğer SKU tanımlanır (burada SKU özelliği değeri ro.boot.product.hardware.sku ) /odm/etc/vintf/manifest_ SKU .xml
    2. /odm/etc/vintf/manifest.xml
    3. Eğer SKU tanımlanır, /odm/etc/manifest_ SKU .xml
    4. /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:
    1. Eğer SKU tanımlanır (burada SKU özelliği değeri ro.boot.product.vendor.sku ) /vendor/etc/vintf/manifest_ SKU .xml
    2. /vendor/etc/vintf/manifest.xml
  • VINTF nesnesi, aygıt bildirimini şu sırayla yükler:
    1. Satıcı bildirimi varsa, aşağıdakileri birleştirin:
      1. Satıcı manifestosu
      2. İsteğe bağlı satıcı bildirim parçaları
      3. İsteğe bağlı ODM bildirimi
      4. İsteğe bağlı ODM bildirim parçaları
    2. Aksi takdirde, ODM bildirimi varsa, ODM bildirimini isteğe bağlı ODM bildirim fragmanları ile birleştirin.
    3. /vendor/manifest.xml (eski, fragmanlar)

    Bunu not et:

    • 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.
    • Sağlanan manifestosu, daha önce listede görünür manifestolarına etiketleri geçersiz kılabilir listede sonradan görünür tezahür, bir listesini birleştirerek zaman sonra Manifestte etiketlerin özellik olduğunu override="true" . Örneğin, ODM tezahür geçersiz kılabilir bazı <hal> etiketleri satıcı manifest'ten. Nitelik belgelerine bakın override aşağıda.

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 bkz Aygıt Manifest Geliştirme .

Çerçeve bildirimi

Çerçeve bildirim dosyası, sistem bildirimi, ürün bildirimi ve system_ext bildiriminden oluşur.

  • (Google tarafından sağlanan) sistemi tezahür elle üretilen ve Android kaynak ağacındaki hayatlarını en edilmektedir /system/libhidl/manifest.xml .
  • Ü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 parçaları .

İş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

Senin içinde Android.bp veya Android.mk dosyası eklemek vintf_fragments herhangi modülüne. Örneğin, size HAL (uygulamanıza ile modülü değiştirebilir my.package.foo@1.0-service-bar ).

... {
    ...
    vintf_fragments: ["manifest_foo.xml"],
    ...
}
LOCAL_MODULE := ...
LOCAL_VINTF_FRAGMENTS := manifest_foo.xml

Bir dosya adı verilen yılında manifest_foo.xml , bu modül 'ün 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.

Uygular Aşağıdaki örnek android.hardware.foo@1.0::IFoo/default yüklenir, vendor veya odm bölüm. O kadar yüklü değilse system , product veya system_ext bölüm, kullanım tipi framework yerine tip 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>

Manifest dosya şeması

Bu bölüm, bu XML etiketlerinin anlamını açıklar. Bazı "Gerekli" etiketleri Android kaynak ağacındaki kaynak dosyadan eksik ve tarafından yazılabilir assemble_vintf yapı anda. 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 manifest'in Meta sürümü. Bildirimde beklenen öğeleri açıklar. XML sürümüyle ilgisiz.
manifest.type
Gerekli. Bu manifestonun türü. Bu değer vardır device cihaz manifest dosyasında ve için framework çerçeve bildirim dosyası için.
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. Tek bir HAL (örneğin GL olarak HIDL veya doğal), bağlı format öznitelik.
manifest.hal.format
İsteğe bağlı. Değer şunlardan biri olabilir:
  • hidl : HIDL HAL'lere. Bu varsayılandır.
  • aidl : AIDL HAL'lere . Yalnızca manifest meta sürüm 2.0 ve üzeri sürümlerde geçerlidir.
  • native : Yerli HAL'lere.
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 : Geçersiz Kıl diğer <hal> aynı olan elementler <name> ve ana sürüm. Hayır ise <version> veya <fqname> bu içindedir <hal> ardından, eleman <hal> eleman engelli olmak için bu HAL beyan eder.
  • false : Diğer geçersiz etmeyin <hal> aynı olan elemanları <name> ve ana sürüm.
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 (yerli HAL, sadece adını gerektirir)
manifest.hal.transport
Ne zaman Gerekli manifest.hal.format == "hidl" . 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 : Binderized mod
  • passthrough : Geçiş modu
manifest.hal.transport.arch
İçin gerekli passthrough ve için mevcut olmamalıdır hwbinder . Sağlanan geçiş hizmetinin bitliğini açıklar. Değer şunlardan biri olabilir:
  • 32 : 32-bit modunda
  • 64 : 64-bit modu
  • 32+64 : Her iki
manifest.hal.version
İsteğe bağlı, tekrar edebilir. A versiyonu hal bir manifest'te etiketleri.

HIDL ve yerli HAL'lere için biçimidir MAJOR . MINOR . Örnekler için bkz hardware/interfaces , vendor/${VENDOR}/interfaces , framework/hardware/interfaces veya system/hardware/interfaces .

Onlar ayrı önemli sürümlerini temsil olarak HIDL ve yerli HAL'lere sağlanan ana sürüm başına sadece bir küçük versiyonu ile, uzun gibi birden versiyon alanlarını kullanabilir. Örneğin, 3.1 ve 3.2 bir arada var olamaz, ancak 1.0 ve 3.4 olabilir. Bu herkes için geçerlidir hal sürece, aynı ada sahip elemanların override="true" . Değerleri <version> ile ilişkili olmayan <fqname> bir nedeni <fqname> bir sürümünü taşır.

AIDL HAL'lere için <version> aşağıda Android 11 ve çalıştıran cihazlarda mevcut olmamalıdır. <version> Yukarıdaki Android 12 ve çalıştıran cihazlarda tek tamsayı olmalıdır. Orada olmalı, en fazla bir <version> her biri için (package, interface, instance) tuple. Mevcut Değilse, varsayılan 1 . Değeri <version> tüm ilişkili <fqname> Aynı içinde <hal> nedeniyle <fqname> bir versiyonunu taşımaz.
manifest.hal.interface
Gerekli, kopya olmadan tekrar edebilir. Örnek adı olan pakette bir arabirim belirtin. Birden olabilir <interface> öğeler bir <hal> ; 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 arayüz ama hiçbir çoğaltılamaz için birden çok örneği olabilir <instance> elemanlar.
manifest.hal.fqname
İsteğe bağlı, tekrar edebilir. Alternatif bir yol adı ile HAL için bir örneğini belirtmek için manifest.hal.name .
  • HIDL HAL'lere için biçimidir @ MAJOR . MINOR :: INTERFACE / INSTANCE .
  • AIDL HAL'lere için biçimidir INTERFACE / INSTANCE .
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. Bu biçim vardır SDK_INT . PLAT_INT .
manifest.vendor-ndk
Gerekli, tekrar edebilir; çerçeve manifestosu için gereklidir. Aygıt bildiriminde bulunmamalıdır. Birden <vendor-ndk> girişleri farklı olmalıdır <version> s. Ç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ğeri bir kütüphanenin dosya adı, örneğin bir libjpeg.so önek dahil lib ve son ek .so . 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. Onun değeri varsayılan için manifest.target-level mevcut değilse. Daha büyük ya da eşit olmalıdır manifest.target-level . Bkz çekirdek maç kurallarını Ayrıntılar için.