Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

FCM ライフサイクル

Android フレームワーク リリースには、複数のフレームワーク互換性マトリックス(FCM)が含まれます。これらの複数のマトリックスはそれぞれ、アップグレード可能な各ターゲット FCM バージョンに対応しており、フレームワークで何が使用されるかと、ターゲット FCM バージョンの要件を定義します。FCM ライフサイクルの一環として、Android は HIDL HAL のサポートを終了して削除し、HAL バージョンのステータスを反映するために FCM ファイルを変更します。

フレームワークのみの OTA を OTA 固有のエコシステムで有効にするためには、ベンダー インターフェースを拡張するパートナーも、同様の方法で HIDL HAL のサポートを終了して削除する必要があります。

用語

フレームワーク互換性マトリックス(FCM) ベンダー実装の準拠に関するフレームワーク要件を指定する XML ファイル。互換性マトリックスはバージョニングされ、フレームワーク リリースごとに新しいバージョンが凍結されます。各フレームワーク リリースには複数の FCM が含まれます。
プラットフォーム FCM バージョン(SF フレームワーク リリースに含まれるすべての FCM バージョンのセット。フレームワークは、これらの FCM のいずれか 1 つの要件を満たすベンダー実装と連携して動作します。
FCM バージョン(F) フレームワーク リリースに含まれるすべての FCM の中で最も上位のバージョン。
ターゲット FCM バージョン(V) ベンダー実装が要件を満たす、ターゲットとなる FCM バージョン(SF 内のセットのいずれか)。デバイス マニフェストで明示的に宣言されます。ベンダー実装は公開された FCM に対して生成する必要がありますが、デバイス マニフェストで新しい HAL バージョンを宣言することもできます。
HAL バージョン HAL バージョンの形式は foo@x.yfoo は HAL 名、x.y は特定のバージョン)です。例: nfc@1.0keymaster@3.0(このドキュメントでは、android.hardware のようなルート プレフィックスの表記は省略します)。
デバイス マニフェスト ベンダー イメージが提供する HAL バージョンを指定する XML ファイル。デバイス マニフェストの内容はデバイスのターゲット FCM バージョンによって制約を受けますが、V に対応する FCM よりも厳密に新しい HAL をリストできます。

新しい FCM バージョンで開発する

Android は、フレームワーク リリースのたびに FCM バージョンをインクリメントします(Android 8、8.1 など)。開発中は、新しい compatibility_matrix.current.xml が作成され(F)、既存の compatibility_matrix.f.xmlf < F)は変更されません。

新しい FCM バージョン F で開発を開始するには:

  1. 最新の compatibility_matrix.<F-1>.xmlcompatibility_matrix.current.xml にコピーします。
  2. ファイル内の level 属性を F に更新します。
  3. 対応するビルドルールを追加して、この互換性マトリックスをデバイスにインストールします。

新しい HAL を導入する

開発中に、現在の FCM バージョン F で新しい HAL(Wi-Fi、NFC など)を Android に導入する場合、optional を次のように設定して compatibility_matrix.current.xml に HAL を追加します。

  • 出荷時設定が V = F のデバイスをこの HAL を含めてリリースする必要がある場合は、 optional="false"

    または
  • 出荷時設定が V = F のデバイスをこの HAL なしでリリースできる場合は、optional="true"

たとえば、Android 8.1 では、オプションの HAL として cas@1.0 が導入されました。 Android 8.1 でリリースするデバイスはこの HAL を実装する必要がないため、compatibility_matrix.current.xml(Android 8.1 のリリース後、compatibility_matrix.2.xml に名前変更)に次のエントリが追加されました。

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

HAL を(マイナー)アップグレードする

開発中に、現在の FCM バージョン F で HAL のバージョンを x.z から x.(z+1) にマイナー アップグレードするときは、次のようになります。

  • そのバージョンが V = F でリリースするデバイスで必要な場合は、compatibility_matrix.current.xmlx.(z+1)optional="false" を記述しなければなりません。
  • そのバージョンが V = F でリリースするデバイスで必要でない場合は、compatibility_matrix.current.xml で、x.y-z をコピーし(オプションで compatibility_matrix.<F-1>.xml からもコピー)、バージョンを x.w-(z+1)w >= y)に変更しなければなりません。

たとえば、Android 8.1 では 1.0 HAL のマイナー バージョン アップグレードとして broadcastradio@1.1 が導入されました。Android 8.0 でリリースするデバイスでは古いバージョン broadcastradio@1.0 はオプションですが、Android 8.1 でリリースするデバイスでは新しいバージョン broadcastradio@1.1 がオプションとなります。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>

このエントリは compatibility_matrix.current.xml(Android 8.1 のリリース後、compatibility_matrix.2.xml に名前変更)にコピーされ、次のように変更されました。

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

HAL を(メジャー)アップグレードする

開発中に、現在の FCM バージョン F で HAL のバージョンをメジャー アップグレードするときは、optional を次のように設定して compatibility_matrix.current.xml に新しいメジャー バージョン x.0 が追加されます。

  • 出荷時設定が V = F であるデバイスを x.0 でリリースする必要がある場合は、optional="false"(バージョン x.0 のみ)。
  • 出荷時設定が V = F であるデバイスを、この HAL を含めてリリースする必要があるが、古いメジャー バージョンでリリースできる場合は、optional="false"(ただし、同じ <hal> タグに古いメジャー バージョンを指定)。
  • 出荷時設定が V = F であるデバイスで HAL をリリースする必要がない場合は、optional="true"

たとえば、Android 9 では、1.0 HAL のメジャー バージョン アップグレードとして health@2.0 が導入され、1.0 HAL のサポートが終了しました。Android 8.0 と Android 8.1 でリリースするデバイスでは、古いバージョン health@1.0 はオプションです。Android 9 でリリースするデバイスでは、サポートが終了した 1.0 HAL を提供することはできず、代わりに新しい 2.0 バージョンを提供する必要があります。compatibility_matrix.legacy.xmlcompatibility_matrix.1.xmlcompatibility_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>

このエントリは compatibility_matrix.current.xml(Android 9 のリリース後、compatibility_matrix.3.xml に名前変更)にコピーされ、次のように変更されました。

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

制限事項:

  • 2.0 HAL は compatibility_matrix.3.xml に含まれており、optional="false" が指定されているため、Android 9 でリリースするデバイスの出荷時設定は 2.0 HAL にする必要があります。
  • 1.0 HAL は compatibility_matrix.3.xml に含まれないため、Android 9 でリリースするデバイスは 1.0 HAL を提供できません(この HAL はサポートが終了したと見なされます)。
  • legacy/1/2.xml(Android 9 が連携して動作可能な古い FCM バージョン)にはオプションの HAL として 1.0 HAL が存在するため、Android 9 フレームワークは引き続き 1.0 HAL(削除された HAL バージョンとは見なされません)と連携して動作できます。

新しい FCM バージョン

FCM バージョンのリリースは、AOSP リリースの一環として Google のみが実施します。このプロセスには次のステップがあります。

  1. compatibility_matrix.current.xmlcompatibility_matrix.F.xml に名前変更します。
  2. ファイルに level="F" 属性があることを確認します。
  3. 対応するビルドルールを編集して、ファイル名の変更を反映させます。
  4. すべてのデバイスのビルドとリリースを確認します。
  5. VTS テストを更新し、最新のフレームワーク(Shipping API レベルに基づく)でリリースするデバイスのターゲット FCM バージョンが V >= F であることを確認します。
  6. AOSP にファイルを公開します。

このファイルは、いったん名前を変更して公開すると、変更不可になります。たとえば、Android 9 の開発では、hardware/interfaces/compatibility_matrices/ に対して以下のファイルがビルドされました。

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

Android 9 のリリース時には、compatibility_matrix.current.xmlcompatibility_matrix.3.xml に名前変更され、hardware/interfaces/compatibility_matrices/ に対して以下のファイルがビルドされています。

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

VTS テストで、Android 9 でリリースするデバイスのターゲット FCM バージョンが 3 以上であることが確認されています。

HAL バージョンのサポート終了

HAL バージョンのサポート終了はデベロッパーが決定します(たとえば、AOSP HAL の場合は Google が決定します)。サポート終了は、上位の HAL バージョン(マイナーかメジャーかを問わない)がリリースされたときに実施される可能性があります。FCM バージョン F で特定の HAL foo@x.y のサポートが終了したということは、ターゲット FCM バージョン V = F 以降でリリースするデバイスでは、バージョン x.yx.y より前のバージョンで foo を実装できないことを意味します。サポートが終了した HAL バージョンは、デバイスをアップグレードするフレームワークでは引き続きサポートされます。

FCM バージョン F がリリースされたとき、ターゲット FCM バージョン V = F の最新の FCM に特定の HAL バージョンが明示的に記述されていないと、HAL バージョン foo@x.y はサポートが終了したと見なされます。V でリリースするデバイスの場合、次のいずれかの状態に該当します。

  • フレームワークは、より上位のバージョン(メジャーかマイナーかを問わない)を必要とする。
  • フレームワークは、これ以上 HAL を必要としない。

たとえば、Android 9 では、1.0 HAL のメジャー バージョン アップグレードとして health@2.0 が導入されました。health@1.0compatibility_matrix.3.xml からは削除されましたが、compatibility_matrix.legacy.xmlcompatibility_matrix.1.xmlcompatibility_matrix.2.xml には存在します。したがって、health@1.0 はサポートが終了したと見なされます。

ターゲット FCM バージョンのサポートの削除

ターゲット FCM バージョン V のアクティブなデバイスの数が特定のしきい値を下回ると、そのターゲット FCM バージョンは次回のフレームワーク リリースのセット SF から削除されます。具体的には、今後システム イメージにインストールされないように、ビルドルールから compatibility_matrix.V.xml を削除し、削除された機能を実装するコードまたはその機能が依存するコードを削除します。特定のフレームワーク リリースで SF に存在しないターゲット FCM バージョンを持つデバイスを、そのリリースにアップグレードすることはできません。

HAL バージョンのステータス

以下のセクションでは、HAL バージョンが取りうるステータスを(時系列順に)説明します。

未リリース時

HAL バージョンが公開済みの互換性マトリックスおよび凍結された互換性マトリックスに含まれていない場合は、未リリースと見なされ、開発中であると考えられます。これには、compatibility_matrix.current.xml にのみ含まれる HAL バージョンが含まれます。例:

  • Android 9 の開発中(compatibiility_matrix.current.xmlcompatibility_matrix.3.xml に名前変更される前)、health@2.0 HAL は未リリースの HAL と見なされていました。
  • teleportation@1.0 HAL はリリース済みの互換性マトリックスに含まれておらず、未リリースの HAL と見なされます。

リリース済み、現行バージョン

HAL バージョンが公開済みの互換性マトリックスまたは凍結された互換性マトリックスに含まれている場合は、リリース済みと見なされます。たとえば、FCM バージョン 3 が凍結されて(compatibiility_matrix.current.xmlcompatibility_matrix.3.xml に名前変更されて)AOSP に公開された後、health@2.0 HAL はリリース済みの現行 HAL バージョンと見なされます。

HAL バージョンが、FCM バージョンが最も高い公開済みの互換性マトリックスまたは凍結された互換性マトリックス(compatibility_matrix.current.xml を除く)に含まれている場合、その HAL バージョンは現行バージョンと見なされます(つまり、サポートは終了していません)。たとえば、compatibility_matrix.3.xml に現在含まれている既存の HAL バージョン(compatibility_matrix.legacy.xml で導入された nfc@1.0 など)も、リリース済みの現行 HAL バージョンと見なされます。

リリース済み、サポート終了

HAL バージョンのサポートが終了するのは、次の条件をすべて満たす場合のみです。

  • リリース済みである。
  • FCM バージョンが最も高い公開済みの互換性マトリックスまたは凍結された互換性マトリックスに含まれていない。
  • フレームワークが現在もサポートしている公開済みの互換性マトリックスまたは凍結された互換性マトリックスに含まれている。

例:

したがって、Android 9 では、power@1.0 は現行バージョンであり、サポートは終了していません

削除済み

HAL バージョンが削除されるのは、次の条件をすべて満たす場合のみです。

  • 以前リリースされた。
  • フレームワークがサポートしている公開済みの互換性マトリックスまたは凍結された互換性マトリックスに含まれていない。

公開済みまたは凍結されているがフレームワークによりサポートされていない互換性マトリックスは、削除された HAL バージョンのセットを定義するコードベースに保持されます。これにより、削除された HAL バージョンが新しいデバイスに存在しないことを確認する VTS テストを作成できます。

レガシー FCM

ターゲット FCM バージョンのレガシーは、Treble に対応していないすべてのデバイス用の特別な値です。レガシー FCM である compatibility_matrix.legacy.xml には、レガシー デバイス(Android 8.0 より前のバージョンでリリースするデバイス)のフレームワークの要件がリストされています。

バージョン F の FCM に対してこのファイルが存在する場合、デバイス マニフェストがこのファイルと互換性があれば、任意の非 Treble デバイスを F にアップグレードできます。削除の手続きは、他のターゲット FCM バージョンの FCM と同じです(8.0 より前のアクティブなデバイスの数が特定のしきい値を下回ると削除されます)。

リリース済みの FCM バージョン

リリース済みの FCM バージョンのリストは hardware/interfaces/compatibility_matrices で確認できます。

特定の Android リリースでリリースされた FCM バージョンを確認するには、Level.h をご覧ください。