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.F.xml
이 생성되고 기존 compatibility_matrix.f.xml
(f
< F
)은 더 이상 변경되지 않습니다.
새 FCM 버전 F
에서 개발을 시작하려면 다음을 실행합니다.
- 최신
compatibility_matrix.<F-1>.xml
을compatibility_matrix.F.xml
에 복사합니다. - 파일의
level
속성을F
로 업데이트합니다. - 상응하는 빌드 규칙을 추가하여 이 호환성 매트릭스를 기기에 설치합니다.
새 HAL 소개
개발 중에 현재 FCM 버전 F
에서 새 HAL(Wi-Fi, NFC 등)을 Android에 도입할 때 다음 optional
설정으로 HAL을 compatibility_matrix.F.xml
에 추가합니다.
V = F
로 출하되는 기기가 이 HAL과 함께 출시되어야 하는 경우optional="false"
또는V = F
로 출하되는 기기가 이 HAL 없이 출시될 수 있는 경우optional="true"
예를 들어 Android 8.1에서는 선택적 HAL로 cas@1.0
을 도입했습니다.
Android 8.1로 출시되는 기기는 이 HAL을 구현할 필요가 없으므로 다음 항목이 compatibility_matrix.F.xml
(해당 버전 개발 중에 일시적으로 이름이 compatibility_matrix.current.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
의 x.z
에서 x.(z+1)
로 마이너 버전 업그레이드가 HAL에 있을 때 버전이 다음과 같은 경우:
V = F
로 출시되는 기기에 필요함.compatibility_matrix.F.xml
이x.(z+1)
및optional="false"
를 명시해야 합니다.V = F
로 출시되는 기기에 필요하지 않음.compatibility_matrix.F.xml
이x.y-z
와compatibility_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.F.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.F.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.F.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에 의해서만 진행되며 다음과 같은 단계가 포함됩니다.
compatibility_matrix.F.xml
에level="F"
속성이 있는지 확인합니다.- 모든 기기가 빌드되고 부팅되는지 확인합니다.
- VTS 테스트를 업데이트하여 배송 API 수준에 따른 최신 프레임워크로 출시되는 기기에 타겟 FCM 버전
V >= F
가 있는지 확인합니다. - AOSP에 게시합니다.
예를 들어 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.0
은 compatibility_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.y
에 max-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-level
이V
보다 작거나 같은 프레임워크 HAL을 삭제하고 삭제된 프레임워크 HAL을 구현한 코드를 모두 삭제합니다.
지정된 프레임워크 버전이 SF가 아닌 타겟 FCM 버전을 사용하는 기기는 이 버전으로 업그레이드할 수 없습니다.
HAL 버전 상태
다음 섹션에서는 HAL 버전의 가능한 상태를 시간 순서대로 설명합니다.
미출시
기기 HAL의 경우 HAL 버전이 고정된 공개 호환성 매트릭스에 있지 않은 경우 이 버전은 출시되지 않았고 개발 중인 것으로 간주됩니다.
여기에는 compatibility_matrix.F.xml
에만 있는 HAL 버전이 포함됩니다. 예:
- Android 9 개발 중에는
health@2.0
HAL이 출시되지 않은 HAL로 간주되어compatibiility_matrix.3.xml
에만 있었습니다. teleportation@1.0
HAL은 어떠한 출시된 호환성 매트릭스에도 없으며 마찬가지로 출시되지 않은 HAL로 간주됩니다.
프레임워크 HAL의 경우 관련 없는 개발 브랜치의 프레임워크 매니페스트에만 있는 HAL 버전은 출시되지 않은 것으로 간주합니다.
출시된 최신 버전
기기 HAL의 경우 HAL 버전이 고정된 공개 호환성 매트릭스에 있으면 출시된 것입니다. 예를 들어 FCM 버전 3이 고정되고 AOSP에 게시되면 health@2.0
HAL은 출시된 최신 HAL 버전으로 간주됩니다.
HAL 버전이 가장 높은 FCM 버전을 가진 고정된 공개 호환성 매트릭스에 있으면 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 버전을 가진 고정된 공개 호환성 매트릭스에 없는 경우
- 프레임워크에서 계속 지원하는 고정된 공개 호환성 매트릭스에 있는 경우
예:
health@1.0
HAL은compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
및compatibility_matrix.2.xml
에 있지만compatibility_matrix.3.xml
에는 없습니다. 따라서 Android 9에서는 지원 중단된 것으로 간주됩니다.- 전원 HAL에는 Android 9의 마이너한 버전 업그레이드가 있지만
power@1.0
은 계속compatibility_matrix.3.xml
에 있습니다.power@1.0
은compatibility_matrix.legacy.xml
,compatibility_matrix.1.xml
,compatibility_matrix.2.xml
에 있습니다.compatibility_matrix.3.xml
에는power@1.0-1
이 있습니다.
따라서 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
를 참고하세요.