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와 같은 루트 접두사는 이 문서 전체에서 생략됩니다.
기기 매니페스트 공급업체 및 ODM 이미지를 포함하여 공급업체 인터페이스의 기기 측에서 제공하는 HAL 버전을 지정하는 XML 파일입니다. 기기 매니페스트의 콘텐츠는 기기의 타겟 FCM 버전에 의해 제한되지만 V에 해당하는 FCM보다 새 버전의 HAL을 나열할 수 있습니다.
기기 HAL 기기 매니페스트에 나열(제공)되고 프레임워크 호환성 매트릭스(FCM)에 나열(필수 또는 선택사항)되는 HAL입니다.
기기 호환성 매트릭스(DCM) 공급업체에서 준수해야 할 프레임워크 구현 요구사항을 지정하는 XML 파일입니다. 기기마다 하나의 DCM이 포함됩니다.
프레임워크 매니페스트 공급업체 인터페이스의 프레임워크 측면(예: system, system_ext, 제품 이미지)에서 제공하는 HAL 버전을 명시한 XML 파일입니다. 프레임워크 매니페스트의 HAL은 기기의 타겟 FCM 버전에 따라 동적으로 사용 중지됩니다.
프레임워크 HAL 프레임워크 매니페스트에 제공된 것으로 나열되고 기기 호환성 매트릭스(DCM)에 필수 또는 선택사항으로 등록된 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 이상이 있는지 확인할 수 있습니다.

또한 제품 및 system_ext FCM은 각 플랫폼 FCM 버전에 관한 요구사항도 나열할 수 있습니다. 제품 및 system_ext 파티션의 FCM 버전 출시는 각각 이러한 이미지의 소유자가 진행합니다. 제품 및 system_ext 파티션의 FCM 버전 번호는 시스템 파티션의 버전 번호와 일치해야 합니다. 시스템 파티션의 FCM 버전과 마찬가지로 제품 및 system_ext 파티션의 FCM 버전 F에 있는 호환성 매트릭스는 타겟 FCM 버전 F가 있는 기기의 요구사항을 반영합니다.

HAL 버전 지원 중단

HAL 버전의 지원 중단 여부는 개발자가 결정합니다. 즉, AOSP HAL의 경우 Google이 결정을 내립니다. 메이저든 마이너든 더 높은 HAL 버전이 출시되면 지원이 중단될 수 있습니다.

기기 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 = F로 출시되는 기기의 경우 다음 조건 중 하나가 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은 지원 중단된 것으로 간주됩니다.

프레임워크 HAL 지원 중단

특정 프레임워크 HAL foo@x.y가 FCM 버전 F에서 지원 중단되면 타겟 FCM 버전 V = F 이상으로 출시되는 모든 기기는 프레임워크가 x.y 버전 또는 x.y 버전의 이전 버전에서 foo를 제공할 것으로 예상하면 안 됩니다. 지원 중단된 HAL 버전은 기기 업그레이드를 위해 프레임워크에서 계속 지원합니다.

FCM 버전 F가 출시될 때 HAL 버전 foo@x.y는 프레임워크 매니페스트가 foo@x.ymax-level="F - 1"을 지정한 경우 지원 중단된 것으로 간주합니다. V = F로 출시되는 기기의 경우 프레임워크는 HAL foo@x.y를 제공하지 않습니다. V = F로 출시되는 기기의 기기 호환성 매트릭스는 버전이 max-level < V인 프레임워크 HAL을 나열하면 안 됩니다.

예를 들어, Android 12에서는 schedulerservice@1.0이 지원 중단됩니다. max-level 속성은 Android 11에 도입된 FCM 버전인 5로 설정됩니다. Android 12 프레임워크 매니페스트를 참고하세요.

타겟 FCM 버전의 지원 제거

특정 타겟 FCM 버전 V의 활성 기기가 특정 임계값 아래로 떨어지면 타겟 FCM 버전이 다음 프레임워크 출시의 세트 SF에서 제거됩니다. 이 작업은 다음 두 가지 단계를 모두 거치게 됩니다.

  • 시스템 이미지에 설치되지 않도록 빌드 규칙에서 compatibility_matrix.V.xml을 삭제하고 삭제된 기능을 구현했거나 이에 종속된 코드를 삭제합니다.
  • 프레임워크 매니페스트에서 max-levelV보다 작거나 같은 프레임워크 HAL을 삭제하고 삭제된 프레임워크 HAL을 구현한 코드를 모두 삭제합니다.

지정된 프레임워크 버전이 SF가 아닌 타겟 FCM 버전을 사용하는 기기는 이 버전으로 업그레이드할 수 없습니다.

HAL 버전 상태

다음 섹션에서는 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의 경우 관련 없는 개발 브랜치의 프레임워크 매니페스트에만 있는 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의 경우 HAL 버전이 max-level 속성 또는 이 브랜치에서 출시된 FCM 버전 이상의 max-level(일반적이지 않음) 없이 최근 출시된 브랜치의 프레임워크 매니페스트에 있다면 HAL 버전은 출시된 최신 버전으로 간주합니다. 예를 들어 displayservice HAL은 Android 12framework manifest에 지정된 대로 Android 12에서 출시된 최신 버전입니다.

출시되었지만 지원 중단된 버전

기기 HAL의 경우 다음 사항이 모두 충족되는 경우에만 HAL 버전이 지원 중단됩니다.

  • 출시된 경우
  • 가장 높은 FCM 버전을 가진 고정된 공개 호환성 매트릭스에 없는 경우
  • 프레임워크에서 계속 지원하는 고정된 공개 호환성 매트릭스에 있는 경우

예:

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

프레임워크 HAL의 경우 max-level 속성이 이 브랜치에서 출시된 FCM 버전보다 낮은 상태에서 HAL 버전이 최근 출시된 브랜치의 프레임워크 매니페스트에 있다면 이 HAL 버전은 출시되었지만 지원 중단된 것으로 간주합니다. 예를 들어, schedulerservice HAL은 Android 12framework manifest에 지정된 대로 출시되었지만 Android 12에서 지원 중단되었습니다.

삭제됨

기기 HAL의 경우 다음 사항이 true인 경우에만 HAL 버전이 삭제됩니다.

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

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

프레임워크 HAL의 경우 다음 사항이 충족되는 경우에만 HAL 버전이 삭제됩니다.

  • 이전에 출시된 경우
  • 최근에 출시된 브랜치의 프레임워크 매니페스트에 없는 경우

레거시 FCM

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

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

출시된 FCM 버전

출시된 FCM 버전 목록은 hardware/interfaces/compatibility_matrices에 있습니다.

특정 Android 버전으로 출시된 FCM 버전을 찾으려면 Level.h를 참고하세요.