Matrici di compatibilità

Questa sezione descrive le matrici di compatibilità del framework e dei dispositivi e lo schema della matrice di compatibilità. Per di corrispondenza, consulta la sezione Informazioni sulla corrispondenza Regole.

Framework compatibilità Matrix (FCM)

La matrice della compatibilità del framework (FCM) descrive i requisiti del sul dispositivo su cui viene eseguito. La matrice di compatibilità del framework è composta dal sistema la matrice di compatibilità dei prodotti, e la matrice di compatibilità system_ext. I requisiti di FCM devono essere soddisfatti dal file manifest del dispositivo (requisiti applicati in fase di build, runtime e in VTS).

FCM system_ext e FCM del prodotto sono complementari a FCM specifico per il dispositivo (installato nella partizione di sistema).

  • Il file FCM del dispositivo deve riflettere i requisiti dei moduli nel System Partizione di sistema.
  • Il valore FCM system_ext deve riflettere i requisiti in base ai moduli nella partizione system_ext.
  • La FCM del prodotto deve riflettere i requisiti per moduli nel partizione del prodotto.

Tutti gli FCM devono essere in linea con le modifiche di un OEM al framework del sistema, del prodotto e system_ext. Ad esempio, se un'app installata nella partizione prodotto utilizza un'estensione del fornitore di un'interfaccia HAL, i requisiti dell'interfaccia devono essere dichiarati nel FCM del prodotto.

Esempio di file della matrice di compatibilità del sistema:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

Per maggiori dettagli, consulta FCM Ciclo di vita.

Matrice di compatibilità dei prodotti

Il prodotto FCM è un file della matrice di compatibilità del framework nel prodotto della partizione di testo. L'oggetto VINTF unisce il prodotto FCM con gli FCM nel sistema e system_ext in fase di runtime.

Esempio di file FCM del prodotto:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

Matrice di compatibilità System_ext

FCM system_ext è un file della matrice di compatibilità del framework in system_ext della partizione di testo. L'oggetto VINTF unisce l'FCM system_ext agli FCM nel sistema e nel prodotto in fase di runtime. Consulta la matrice di compatibilità dei prodotti per un file FCM system_ext di esempio.

Matrice di compatibilità dei dispositivi (DCM)

La matrice di compatibilità dei dispositivi descrive una serie di requisiti del dispositivo si aspetta dal framework (requisiti applicati al momento del lancio e OTA).

File DCM di esempio:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

Schema della matrice di compatibilità

Questa sezione descrive il significato di questi tag XML. Alcuni elementi "obbligatori" tag potrebbe non essere presente nel file di origine nella struttura di origine Android ed essere scritto da assemble_vintf in fase di creazione. "Obbligatorio" i tag devono essere presenti nei file corrispondenti dispositivo.

?xml
Facoltativo. Fornisce solo informazioni al parser XML.
compatibility-matrix.version
Obbligatorio. Meta-versione di questa matrice di compatibilità. Descrive gli elementi previsto nella matrice di compatibilità. Non correlato alla versione XML.
compatibility-matrix.type
Obbligatorio. Tipo di matrice di compatibilità:
  • "device": matrice di compatibilità dei dispositivi.
  • "framework": matrice di compatibilità del framework.
manifest.level
Obbligatorio per la matrice di compatibilità del framework. In Android 12 e versioni successive, consentito nei file della matrice di compatibilità del framework nelle partizioni product e system_ext. Specifica la versione della matrice della compatibilità del framework (versione FCM) di questo file. Non dichiarare nella matrice di compatibilità del framework specifica per il dispositivo (ad es. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE).
compatibility-matrix.hal
Facoltativo e può ripetersi. Elenca un singolo HAL (HIDL o nativo) che è che il proprietario della matrice di compatibilità (framework o dispositivo) presenti. Le voci HAL sono distinte da un elemento <name>; possono esserci più voci HAL con lo stesso nome (condiziona la condizione "and").
compatibility-matrix.hal.format
Facoltativo. Il valore può essere uno dei seguenti:
  • "hidl": HIDL HAL. Questa è l'impostazione predefinita.
  • "aidl": AIDL HAL. Valido solo sulla meta-versione 2.0 della matrice di compatibilità.
  • "native": HAL nativi.
compatibility-matrix.hal.optional
L'attributo è facoltativo e il valore predefinito è false. Indica se l'HAL è facoltativa per il proprietario della matrice di compatibilità (framework o dispositivo). Se <hal> voce è contrassegnata come facoltativa, il che significa che il proprietario può funzionino con questo HAL, se presente, ma non richiede la sua presenza.
compatibility-matrix.hal.name
Obbligatorio. Nome completo del pacchetto di questo HAL. Esempi:
  • android.hardware.camera (HIDL o AIDL HAL)
  • GLES (HAL nativo, richiede solo il nome)
compatibility-matrix.hal.version
Un elenco di intervalli di versioni (vedi corrispondenze dell'HAL) che definisce le versioni del proprietario della matrice di compatibilità (framework dispositivo).

Per gli HAL HIDL e nativi, obbligatorio, può essere ripetuto senza duplicati. Il formato è uno dei seguenti:
  • MAJOR.MINOR_MIN-MINOR_MAX
  • MAJOR.MINOR (equivalente a MAJOR.MINOR-MINOR)
di Gemini Advanced.
Per gli HAL AIDL, non deve essere presente sui dispositivi con Android 11 e precedenti. Facoltativo sui dispositivi con versioni successive. Se specificato, il formato è uno dei seguenti:
  • VERSION_MIN-VERSION_MAX
  • VERSION (equivalente a VERSION-VERSION)
di Gemini Advanced. Se non specificato, il valore predefinito è 1.
compatibility-matrix.hal.interface
Facoltativo, può essere ripetuto. Un elenco delle interfacce richieste per questo HAL.
compatibility-matrix.hal.interface.name
Obbligatorio. Nome dell'interfaccia.
compatibility-matrix.hal.interface.instance
Facoltativo, può essere ripetuto. Un elenco delle istanze richieste di questa interfaccia.
compatibility-matrix.hal.interface.regex-instance
Facoltativo, può essere ripetuto. Un elenco di pattern per i nomi di istanza obbligatori a riga di comando. Utilizza le funzionalità di Estesa Espressione regolare.
compatibility-matrix.kernel
Facoltativo, può essere ripetuto. Specifica un elenco di configurazioni del kernel che il framework per ogni versione del kernel.
Più <kernel> con lo stesso <version> possono esistenti in modo da sottintendere "e" relazione tra utenti. Ogni <kernel> è un "frammento" dei requisiti che vengono attivati solo quando <conditions> sono sono soddisfatte determinate condizioni.
compatibility-matrix.kernel.version
Obbligatorio. Versione kernel. Il formato è VERSION.MAJOR_REVISION.MINOR_REVISION. La versione e la revisione principale devono corrispondere esattamente. La revisione secondaria definisce versione LTS minima del kernel prevista dal framework.
compatibility-matrix.kernel.condition
Facoltativo. Non deve esistere per i primi <kernel> di ogni completamente gestita. Specifica un elenco di condizioni. Quando le condizioni sono soddisfatte, i requisiti indicati in questo frammento <kernel> siano abilitati.
compatibility-matrix.kernel.config
Facoltativo, può essere ripetuto. Elenca CONFIG elementi che devono essere corrispondenti a questa versione del kernel. Ogni elemento CONFIG è una coppia chiave-valore coppia; gli elementi di configurazione sono distinti per chiave.
compatibility-matrix.kernel.config.key
Obbligatorio. Nome della chiave dell'elemento CONFIG. Inizia con CONFIG_.
compatibility-matrix.kernel.config.value
Obbligatorio. Valore dell'elemento CONFIG. Il formato dipende dal tipo:
  • string. Le virgolette sono omesse.
  • int. Decimale ed esadecimale (deve iniziare con 0x o 0X)valori. Interpretato come un numero intero a 64 bit; gli overflow comportano il troncamento. L'analisi accetta valori compresi tra -264 + 1 a 264 - 1; il 65° bit è troncato; per maggiori dettagli, consulta Strtoull pagina man.)
  • range. Il formato è [int]-[int], ad esempio 10-20. I valori esadecimali sono accettati e devono iniziare con 0x o 0X. I due limiti devono essere un modello a 64 bit non firmato numero intero.
  • tristate. I valori validi sono y, m e n.
compatibility-matrix.kernel.config.value.type
Obbligatorio. Tipo del valore dell'elemento CONFIG, uno tra:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Obbligatorio. Contiene tutte le voci relative a sepolicy. Utilizzato solo di compatibilità del framework.
compatibility-matrix.sepolicy.sepolicy-version
Obbligatorio, può ripetersi. Descrive il requisito per la versione sepolicy. Corrisponde a manifest.sepolicy.version. Ogni istanza di un definisce un intervallo di versioni sepolicy.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Obbligatorio. Dichiara la versione di policydb in cui funziona il framework con.
compatibility-matrix.avb.vbmeta-version
Facoltativo; utilizzata solo dalla matrice di compatibilità del framework. Dichiara il Durata di visualizzazione media: [versione] utilizzata per firmare system.img. Obsoleta in Android 10
compatibility-matrix.vendor-ndk
Facoltativo; utilizzati solo dalla matrice di compatibilità dei dispositivi. Dichiara il requisito dello snapshot del fornitore VNDK. Se non disponibile, non viene richiesto alcun requisito VNDK. sull'immagine di sistema.
compatibility-matrix.vendor-ndk.version
Obbligatorio. Un numero intero positivo che dichiara una versione VNDK richiesta dal dell'immagine del fornitore.
compatibility-matrix.vendor-ndk.library
Facoltativo, può essere ripetuto. Dichiara un insieme di librerie VNDK richieste dai dell'immagine del fornitore. Stessa semantica di manifest.vendor-ndk.library.
compatibility-matrix.system-sdk.version
Facoltativo, può ripetersi; utilizzati solo dalla matrice di compatibilità dei dispositivi. Dichiara il requisito delle app del fornitore nelle versioni SDK di sistema. Se mancante, nessun SDK di sistema nell'immagine di sistema.