Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

FCM 수명 주기

Android 프레임워크 출시에는 여러 FCM(프레임워크 호환성 매트릭스)이 포함되어 있습니다. 업그레이드 가능한 각 타겟 FCM 버전별로 하나씩 존재하는 FCM은 프레임워크에서 사용 가능한 요소와 타겟 FCM 버전 요구사항을 정의합니다. FCM 수명 주기의 일부로서 Android는 HIDL HAL을 지원 중단하고 제거한 다음 HAL 버전 상태를 반영하도록 FCM 파일을 수정합니다.

프레임워크 전용 OTA를 자체 생태계에 사용 설정하려면 공급업체 인터페이스를 확장하는 파트너 또한 같은 메서드를 사용하는 HIDL HAL을 지원 중단하고 제거해야 합니다.

용어

프레임워크 호환성 매트릭스(FCM) 공급업체 구현 준수에 대한 프레임워크 요구사항을 지정하는 XML 파일입니다. 호환성 매트릭스의 버전이 지정되며, 각 프레임워크 출시에 대해 새 버전이 고정됩니다. 각 프레임워크 출시에는 여러 FCM이 포함됩니다.
플랫폼 FCM 버전(SF) 프레임워크 출시의 모든 FCM 버전이 모여 있습니다. 프레임워크는 이러한 FCM 중 하나를 충족하는 모든 공급업체 구현과 함께 작동할 수 있습니다.
FCM 버전(F) 프레임워크 출시의 모든 FCM 사이에서 가장 높은 버전입니다.
타겟 FCM 버전(V) 공급업체 구현에서 충족되는 SF의 타겟팅된 FCM 버전으로 기기 매니페스트에서 명시적으로 선언됩니다. 공급업체 구현은 게시된 FCM에 대해 생성되어야 하지만 기기 매니페스트에 새로운 HAL 버전을 선언할 수도 있습니다.
HAL 버전 HAL 버전에는 foo@x.y 형식이 있고 여기서 foo는 HAL 이름, x.y는 특정 버전입니다. 예를 들면 nfc@1.0, keymaster@3.0이 있습니다. android.hardware와 같은 루트 접두사는 이 문서 전체에서 생략됩니다.
기기 매니페스트 공급업체 이미지에서 어떤 HAL 버전을 제공하는지를 지정하는 XML 파일입니다. 기기 매니페스트의 콘텐츠는 기기의 타겟 FCM 버전에 의해 제한되지만 V에 해당하는 FCM보다 새 버전의 HAL을 나열할 수 있습니다.

새 FCM 버전에서 개발

Android는 각 프레임워크 출시(Android 8, 8.1 등)의 FCM 버전을 증분합니다. 개발 중에는 새 compatibility_matrix.current.xml이 생성되고(F) 기존 compatibility_matrix.f.xml(f < 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 설정으로 HAL을 compatibility_matrix.current.xml에 추가합니다.

  • 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 버전 Fx.z에서 x.(z+1)로 소규모 버전 업그레이드가 HAL에 있을 때 버전이 다음과 같은 경우:

  • V = F로 출시되는 기기에 필요함. compatibility_matrix.current.xmlx.(z+1)optional="false"를 명시해야 합니다.
  • V = F로 출시되는 기기에 필요하지 않음. compatibility_matrix.current.xmlx.y-zcompatibility_matrix.<F-1>.xml(선택사항)의 옵션을 복사하고 버전을 x.w-(z+1)(w >= y)로 변경해야 합니다.

예를 들어 Android 8.1에서는 broadcastradio@1.1을 1.0 HAL의 소규모 버전 업그레이드로 도입했습니다. 이전 버전 broadcastradio@1.0은 Android 8.0으로 출시되는 기기에 선택사항이고 최신 버전 broadcastradio@1.1은 Android 8.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 업그레이드(대규모)

개발 중에 HAL에 현재 FCM 버전 F에서 대규모 버전 업그레이드가 있으면 새로운 주 버전 x.0이 다음 optional 설정으로 compatibility_matrix.current.xml에 추가됩니다.

  • x.0 버전에 한해 optional="false", V = F로 제공되는 기기가 x.0으로 출시되어야 하는 경우
  • 동일한 <hal> 태그에서 이전 주 버전이 있는 optional="false", V = F로 제공되는 기기가 이 HAL로 출시되어야 하지만 이전 주 버전으로 출시될 수 있는 경우
  • optional="true", V = F로 제공되는 기기가 HAL을 실행하지 않아도 되는 경우

예를 들어 Android 9에서는 health@2.0을 1.0 HAL의 소규모 버전 업그레이드로 도입하고 1.0 HAL은 지원 중단됩니다. 이전 버전 health@1.0은 Android 8.0 및 Android 8.1로 출시되는 기기에서 선택사항입니다. Android 9로 출시되는 기기는 지원 중단된 1.0 HAL을 제공하면 안 되며 대신 새로운 2.0 버전을 제공해야 합니다. compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, 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>

이 항목은 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은 optional="false"compatibility_matrix.3.xml에 있으므로 Android 9로 출시되는 기기는 2.0 HAL과 함께 제공되어야 합니다.
  • 1.0 HAL은 compatibility_matrix.3.xml에 없으므로 Android 9로 출시되는 기기는 1.0 HAL을 제공하면 안 됩니다. 이 HAL은 지원 중단된 것으로 간주되기 때문입니다.
  • 1.0 HAL은 legacy/1/2.xml(Android 9가 함께 작동하는 기존 FCM 버전)에 선택적 HAL로 존재합니다. 따라서 Android 9 프레임워크는 계속해서 제거된 HAL 버전으로 간주되지 않는 1.0 HAL을 사용할 수 있습니다.

새 FCM 버전

FCM 버전을 출시하는 프로세스는 AOSP 출시의 일환으로 Google에 의해서만 진행되며 다음과 같은 단계가 포함됩니다.

  1. compatibility_matrix.current.xml의 이름을 compatibility_matrix.F.xml로 바꿉니다.
  2. 파일에 속성 level="F"가 있는지 확인합니다.
  3. 변경된 파일 이름을 반영하도록 상응하는 빌드 규칙을 수정합니다.
  4. 모든 기기가 빌드되고 부팅되는지 확인합니다.
  5. VTS 테스트를 업데이트하여 배송 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.xml의 이름이 compatibility_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 버전이 출시되면 발생할 수 있습니다. 주어진 HAL foo@x.y가 FCM 버전 F에서 지원 중단되면 타겟 FCM 버전 V = F 이상으로 출시되는 모든 기기에서 x.y 버전 또는 x.y 이전의 모든 버전에서 foo를 구현해서는 안 됩니다. 지원 중단된 HAL 버전은 계속해서 기기 업그레이드를 위해 프레임워크에 의해 지원됩니다.

FCM 버전 F가 출시되면 주어진 HAL 버전이 타겟 FCM 버전 V = F의 최신 FCM에 명시되지 않은 경우 HAL 버전 foo@x.y가 지원 중단된 것으로 간주됩니다. V로 출시되는 기기의 경우 다음 조건 중 하나가 true입니다.

  • 프레임워크에는 더 높은 버전(대규모 또는 소규모)이 필요합니다.
  • 프레임워크에 더 이상 HAL이 필요없습니다.

예를 들어 Android 9에서 health@2.0은 1.0 HAL의 대규모 버전 업그레이드로 도입되었습니다. health@1.0compatibility_matrix.3.xml에서 삭제되었지만 compatibility_matrix.legacy.xml, compatibility_matrix.1.xml, compatibility_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.xml의 이름이 compatibility_matrix.3.xml로 바뀌기 전) health@2.0 HAL은 출시되지 않은 HAL로 간주되었습니다.
  • teleportation@1.0 HAL은 어떠한 출시된 호환성 매트릭스에도 없으며 마찬가지로 출시되지 않은 HAL로 간주됩니다.

출시된 최신 버전

고정된 공개 호환성 매트릭스에 있는 HAL 버전은 출시됩니다. 예를 들어 FCM 버전 3이 고정되고(compatibiility_matrix.current.xml의 이름이 compatibility_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 버전을 가진 고정된 공개 호환성 매트릭스에 없는 경우
  • 프레임워크에서 계속 지원하는 고정된 공개 호환성 매트릭스에 있는 경우

예:

따라서 power@1.0은 최신이지만 Android 9에서 지원 중단되지 않습니다.

삭제됨

HAL 버전은 다음과 같은 경우에만 제거됩니다.

  • 이전에 출시된 경우
  • 프레임워크에서 계속 지원하는 고정된 공개 호환성 매트릭스에 없는 경우

공개 및 고정되었지만 프레임워크에 의해 지원되지 않는 호환성 매트릭스는 제거된 HAL 버전 집합을 정의하기 위해 코드베이스에 보관됩니다. 이는 VTS 테스트를 작성하여 제거된 HAL이 새 기기에 없도록 하기 위함입니다.

레거시 FCM

타겟 FCM 버전 레거시는 모든 비 트레블 기기의 특수한 값입니다. 레거시 FCM compatibility_matrix.legacy.xml에는 레거시 기기(Android 8.0 이전에 출시된 기기)의 프레임워크 요구사항이 나열되어 있습니다.

이 파일이 버전 F가 적용된 FCM에 존재하는 경우 모든 비 트레블 기기를 F로 업그레이드할 수 있지만 기기 매니페스트가 이 파일과 호환되어야 합니다. 제거 시에는 여러 8.0 이전 기기가 특정 기준 아래로 떨어진 후에 제거된 다른 타겟 FCM 버전의 FCM과 동일한 절차를 따라야 합니다.