Manifestler

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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:
    1. SKU tanımlanmışsa (burada SKU , ro.boot.product.hardware.sku özelliğinin değeridir), /odm/etc/vintf/manifest_ SKU .xml
    2. /odm/etc/vintf/manifest.xml
    3. SKU tanımlanmışsa, /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. SKU tanımlanmışsa (burada SKU , ro.boot.product.vendor.sku özelliğinin değeridir), /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ıyla birleştirin.
    3. /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 öznitelik override belgelerine bakın.

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 ve framework 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
Inet bağlantı bilgilerini daha fazla belirtmek için manifest.hal.transport.ip ve manifest.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çim MAJOR . MINOR . Örnekler için hardware/interfaces , vendor/${VENDOR}/interfaces , frameworks/hardware/interfaces veya system/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üm hal öğ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 olarak 1 . 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.
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.