Google setzt sich dafür ein, die Rassengerechtigkeit für schwarze Gemeinschaften zu fördern. Siehe wie.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

FCM-Lebenszyklus

Eine Android-Framework-Version verfügt über mehrere FCMs (Framework Compatibility Matrixes) - eine für jede aktualisierbare Ziel-FCM-Version -, die definieren, was das Framework verwenden darf und welche Anforderungen an die Ziel-FCM-Version gestellt werden. Im Rahmen des FCM-Lebenszyklus werden HIDL-HALs von Android abgelehnt und entfernt. Anschließend werden FCM-Dateien so geändert, dass sie den Status der HAL-Version widerspiegeln.

Um OTAs nur für Frameworks in ihren eigenen Ökosystemen zu ermöglichen, sollten Partner, die Anbieterschnittstellen erweitern, HIDL-HALs mit denselben Methoden ebenfalls ablehnen und entfernen.

Terminologie

Framework Compatibility Matrix (FCM) Eine XML-Datei, die Framework-Anforderungen für konforme Herstellerimplementierungen angibt. Die Kompatibilitätsmatrix wird versioniert und für jede Framework-Version wird eine neue Version eingefroren. Jede Framework-Version enthält mehrere FCMs.
Plattform-FCM-Versionen (S F ) Der Satz aller FCM-Versionen in einer Framework-Version. Das Framework kann mit jeder Herstellerimplementierung zusammenarbeiten, die eine dieser FCMs erfüllt.
FCM-Version (F) Die höchste Version unter allen FCMs in einer Framework-Version.
Ziel-FCM-Version (V) Die im Geräte-Manifest explizit deklarierte FCM-Zielversion (von S F ), die eine Herstellerimplementierung erfüllt. Eine Herstellerimplementierung muss für einen veröffentlichten FCM generiert werden, obwohl möglicherweise neuere HAL-Versionen in seinem Gerätemanifest deklariert werden.
HAL-Version Eine HAL-Version hat das Format foo@xy , wobei foo der HAL-Name und xy die spezifische Version ist. zB nfc@1.0 , keymaster@3.0 (das Root-Präfix, zB android.hardware , wird in diesem Dokument weggelassen.)
Geräte-Manifest Eine XML-Datei, die angibt, welche HAL-Versionen das Hersteller-Image bereitstellt. Der Inhalt eines Geräte-Manifests wird durch die Ziel-FCM-Version des Geräts eingeschränkt, kann jedoch HALs auflisten, die im Vergleich zum FCM entsprechend V streng neuer sind.

Entwicklung in einer neuen FCM-Version

Android erhöht die FCM-Version für jede Framework-Version (z. B. Android 8, 8.1 usw.). Während der Entwicklung wird die neue compatibility_matrix.current.xml erstellt ( F ) und die vorhandene compatibility_matrix.f.xml (wobei f < F ) nicht mehr geändert.

So beginnen Sie mit der Entwicklung einer neuen FCM-Version F :

  1. Kopieren Sie die neueste compatibility_matrix.<F-1>.xml in die compatibility_matrix.current.xml .
  2. Aktualisieren Sie die level Attribut in der Datei F .
  3. Fügen Sie entsprechende Build-Regeln hinzu, um diese Kompatibilitätsmatrix auf dem Gerät zu installieren.

Einführung einer neuen HAL

Wenn Sie während der Entwicklung eine neue HAL (Wi-Fi, NFC usw.) für Android in der aktuellen FCM-Version F einführen, fügen Sie die HAL mit den folgenden optional Einstellungen zu compatibility_matrix.current.xml :

  • optional="false" wenn Geräte, die mit V = F werden, mit dieser HAL gestartet werden müssen.

    ODER
  • optional="true" wenn Geräte, die mit V = F geliefert werden, ohne diese HAL gestartet werden können.

Zum Beispiel hat Android 8.1 cas@1.0 als optionales HAL eingeführt. Abzugsvorrichtung mit Android 8.1 ist nicht berechtigt diesen HAL implementieren erforderlich, so dass der folgende Eintrag hinzugefügt wurde compatibility_matrix.current.xml (umbenannt in compatibility_matrix.2.xml nach Android 8.1 veröffentlicht):

<hal format="hidl" optional="true">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

Upgrade eines HAL (Moll)

Wenn ein HAL während der Entwicklung ein Minor-Version-Upgrade von xz auf x.(z+1) bei der aktuellen FCM-Version F , wenn diese Version:

  • Auf Geräten, die mit V = F gestartet werden, muss in der compatibility_matrix.current.xml x.(z+1) und optional="false" .
  • Auf Geräten, die mit V = F gestartet werden, ist die xw-(z+1) compatibility_matrix.current.xml nicht erforderlich. Sie muss " xy-z und "optional" aus " compatibility_matrix.<F-1>.xml xw-(z+1) und die Version in " xw-(z+1) ändern (wobei w >= y ).

Zum Beispiel führte Android 8.1 broadcastradio@1.1 als kleines Versions-Upgrade von 1.0 HAL ein. Die ältere Version, broadcastradio@1.0 , ist optional für Geräte, die mit Android 8.0 gestartet werden, während die neuere Version, broadcastradio@1.1 , optional für Geräte ist, die mit Android 8.1 gestartet werden. In compatibility_matrix.1.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Dieser Eintrag wurde kopiert compatibility_matrix.current.xml (umbenannt in compatibility_matrix.2.xml nach Android 8.1 veröffentlicht) und wie folgt geändert:

<hal format="hidl" optional="true">
    <name>android.hardware.broadcastradio</name>
    <version>1.0-1</version>
    <interface>
        <name>IBroadcastRadioFactory</name>
        <instance>default</instance>
    </interface>
</hal>

Upgrade eines HAL (Major)

Wenn ein HAL während der Entwicklung ein Upgrade der Hauptversion auf die aktuelle FCM-Version F , wird die neue Hauptversion x.0 mit den folgenden optional Einstellungen zu compatibility_matrix.current.xml hinzugefügt:

  • optional="false" nur mit Version x.0 , wenn Geräte, die mit V = F werden, mit x.0 gestartet werden x.0 .
  • optional="false" jedoch zusammen mit älteren Hauptversionen im selben <hal> -Tag, wenn Geräte, die mit V = F geliefert werden, mit dieser HAL gestartet werden müssen, aber mit einer älteren Hauptversion gestartet werden können.
  • optional="true" wenn Geräte, die mit V = F geliefert werden, die HAL nicht starten müssen.

Zum Beispiel führt Android 9 health@2.0 als Hauptversions-Upgrade der 1.0 HAL ein und veraltet die 1.0 HAL. Die ältere Version, health@1.0 , ist optional für Geräte, die mit Android 8.0 und Android 8.1 gestartet werden. Geräte, die mit Android 9 gestartet werden, dürfen nicht die veraltete Version 1.0 HAL bereitstellen, sondern müssen stattdessen die neue Version 2.0 bereitstellen. In compatibility_matrix.legacy.xml , compatibility_matrix.1.xml und compatibility_matrix.2.xml :

<hal format="hidl" optional="true">
    <name>android.hardware.health</name>
    <version>1.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Dieser Eintrag wird kopiert compatibility_matrix.current.xml (umbenannt compatibility_matrix.3.xml mit der Android - 9 - Version) und wie folgt geändert:

<hal format="hidl" optional="false">
    <name>android.hardware.health</name>
    <version>2.0</version>
    <interface>
        <name>IHealth</name>
        <instance>default</instance>
    </interface>
</hal>

Beschränkungen:

  • Da sich die 2.0 HAL in compatibility_matrix.3.xml mit optional="false" , müssen Geräte, die mit Android 9 gestartet werden, mit 2.0 HAL ausgeliefert werden.
  • Da sich die 1.0 HAL nicht in compatibility_matrix.3.xml , dürfen Geräte, die mit Android 9 gestartet werden, die 1.0 HAL nicht bereitstellen (da diese HAL als veraltet gilt).
  • Da die 1.0 HAL in Legacy / 1 / 2.xml (ältere FCM-Versionen, mit denen Android 9 arbeiten kann) als optionale HAL vorhanden ist, kann das Android 9-Framework weiterhin mit der 1.0 HAL (die nicht als entfernte HAL-Version betrachtet wird) arbeiten ).

Neue FCM-Versionen

Der Prozess der Veröffentlichung einer FCM-Version wird ausschließlich von Google im Rahmen einer AOSP-Version durchgeführt und umfasst die folgenden Schritte:

  1. Benennen compatibility_matrix.current.xml in compatibility_matrix.F.xml .
  2. Stellen Sie sicher, dass die Datei das Attribut level="F" .
  3. Bearbeiten Sie die entsprechenden Erstellungsregeln , um die Änderung des Dateinamens widerzuspiegeln.
  4. Stellen Sie sicher, dass alle Geräte erstellt und gestartet werden.
  5. Aktualisieren Sie die VTS-Tests, um sicherzustellen, dass Geräte, die mit dem neuesten Framework (basierend auf der Versand-API-Ebene) gestartet werden, über die Ziel-FCM-Version V >= F verfügen.
  6. Veröffentlichen Sie die Datei in AOSP.

Diese Datei kann nach dem Umbenennen und Veröffentlichen nicht mehr geändert werden. Zum Beispiel, während Android 9 Entwicklung werden die folgenden Dateien gebaut für hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.current.xml

Wenn Android 9 freigegeben wird, compatibility_matrix.current.xml wird umbenannt compatibility_matrix.3.xml und die folgenden Dateien für integrierte hardware/interfaces/compatibility_matrices/ :

  • compatibility_matrix.legacy.xml
  • compatibility_matrix.1.xml
  • compatibility_matrix.2.xml
  • compatibility_matrix.3.xml

VTS-Tests stellen sicher, dass Geräte, die mit Android 9 gestartet werden, über die Ziel-FCM-Version> = 3 verfügen.

Verfall der HAL-Version

Das Verwerfen einer HAL-Version ist eine Entscheidung des Entwicklers (dh für AOSP-HALs trifft Google die Entscheidung). Dies kann passieren, wenn eine höhere HAL-Version (Moll oder Dur) veröffentlicht wird. Wenn ein bestimmtes HAL foo@xy in der FCM-Version F veraltet ist, bedeutet dies, dass jedes Gerät, das mit der Ziel-FCM-Version V = F oder höher gestartet wird, foo in der Version xy oder einer älteren Version als xy nicht implementieren darf. Eine veraltete HAL-Version wird weiterhin vom Framework zum Aktualisieren von Geräten unterstützt.

Wenn die FCM-Version F veröffentlicht wird, gilt eine HAL-Version foo@xy als veraltet, wenn die spezifische HAL-Version in der neuesten FCM für Ziel-FCM-Version V = F nicht explizit angegeben ist. Für Geräte, die mit V gestartet werden, gilt eine der folgenden Bedingungen:

  • Das Framework erfordert eine höhere Version (Dur oder Moll).
  • Das Framework benötigt keine HAL mehr.

In Android 9 wird beispielsweise health@2.0 als Hauptversions-Upgrade von 1.0 HAL eingeführt. health@1.0 aus entfernt compatibility_matrix.3.xml aber vorhanden ist , in compatibility_matrix.legacy.xml , compatibility_matrix.1.xml und compatibility_matrix.2.xml . Daher gilt health@1.0 als veraltet.

Entfernen der Unterstützung für Ziel-FCM-Versionen

Wenn aktive Geräte einer bestimmten Ziel-FCM-Version V einen bestimmten Schwellenwert unterschreiten, wird die Ziel-FCM-Version aus dem Satz S F der nächsten Framework-Version entfernt. Dies erfolgt durch Entfernen von compatibility_matrix.V.xml aus den Erstellungsregeln (damit es nicht mehr auf dem Systemabbild installiert ist) und durch Löschen von Code, der die entfernte Funktionalität implementiert hat oder von dieser abhängt. Geräte mit einer Ziel-FCM-Version außerhalb von SF für eine bestimmte Framework-Version können nicht auf diese Version aktualisiert werden.

HAL Versionsstatus

In den folgenden Abschnitten werden (in chronologischer Reihenfolge) die möglichen Zustände einer HAL-Version beschrieben.

Unveröffentlicht

Wenn sich eine HAL-Version nicht in einer der öffentlichen und eingefrorenen Kompatibilitätsmatrizen befindet, gilt sie als unveröffentlicht und möglicherweise in der Entwicklung. Dies schließt HAL-Versionen ein, die sich nur in compatibility_matrix.current.xml . Beispiele:

  • Während der Entwicklung von Android 9 (vor compatibiility_matrix.current.xml umbenannt wird compatibility_matrix.3.xml ), die health@2.0 wurde HAL eine nicht freigegebene HAL betrachtet.
  • Die teleportation@1.0 HAL befindet sich in keiner freigegebenen Kompatibilitätsmatrix und wird auch als unveröffentlichte HAL betrachtet.

Freigegeben und aktuell

Befindet sich eine HAL-Version in einer öffentlichen und eingefrorenen Kompatibilitätsmatrix, wird sie freigegeben. Zum Beispiel, nach FCM Version 3 eingefroren wird (wenn compatibiility_matrix.current.xml umbenannt wird compatibility_matrix.3.xml ) und AOSP veröffentlicht, die health@2.0 wird HAL eine freigegebene und aktuelle HAL Version betrachtet.

Befindet sich eine HAL-Version in einer öffentlichen und eingefrorenen Kompatibilitätsmatrix mit der höchsten FCM-Version (ohne compatibility_matrix.current.xml ), ist die HAL-Version aktuell (dh nicht veraltet). Zum Beispiel bestehende HAL Versionen (wie nfc@1.0 in eingeführt compatibility_matrix.legacy.xml ) , die in existieren weiterhin compatibility_matrix.3.xml werden auch als freigegeben und aktuelle HAL Versionen berücksichtigt.

Freigegeben, aber veraltet

Eine HAL-Version ist genau dann veraltet, wenn:

  • Es wird freigegeben;
  • Es ist nicht in der öffentlichen und eingefrorenen Kompatibilitätsmatrix enthalten, die die höchste FCM-Version aufweist.
  • Es befindet sich in einer öffentlichen und eingefrorenen Kompatibilitätsmatrix, die das Framework weiterhin unterstützt.

Beispiele:

Daher ist power@1.0 in Android 9 aktuell, aber NICHT veraltet.

Entfernt

Eine HAL-Version wird genau dann entfernt, wenn:

  • Es wurde zuvor veröffentlicht;
  • Das Framework unterstützt keine öffentliche und eingefrorene Kompatibilitätsmatrix.

Kompatibilitätsmatrizen, die öffentlich sind, eingefroren sind, aber vom Framework nicht unterstützt werden, werden in der Codebasis gespeichert, um die entfernten HAL-Versionen zu definieren, sodass VTS-Tests geschrieben werden können, um sicherzustellen, dass entfernte HALs nicht auf neuen Geräten vorhanden sind.

Legacy-FCMs

Das Legacy der Ziel-FCM-Version ist ein besonderer Wert für alle Nicht-Treble-Geräte. Das Legacy-FCM, compatibility_matrix.legacy.xml , listet die Anforderungen des Frameworks für Legacy-Geräte (dh Geräte, die vor Android 8.0 gestartet wurden) auf.

Wenn diese Datei für einen FCM mit Version F , kann jedes Nicht-Treble-Gerät auf F aktualisiert werden, sofern sein Gerätemanifest mit dieser Datei kompatibel ist. Das Entfernen erfolgt nach dem gleichen Verfahren wie bei FCMs für andere Ziel-FCM-Versionen (entfernt, nachdem die Anzahl der aktiven Geräte vor 8.0 einen bestimmten Schwellenwert unterschritten hat).

Veröffentlichte FCM-Versionen

Die Liste der freigegebenen FCM-Versionen finden Sie unter hardware/interfaces/compatibility_matrices .

Informationen zur FCM-Version, die mit einer bestimmten Android-Version veröffentlicht wurde, finden Sie unter Level.h .