공급업체는 새 기기를 개발하고 출시할 때 기기 매니페스트(DM)에 타겟 FCM 버전을 정의하여 선언할 수 있습니다. 기존 기기의 공급업체 이미지를 업그레이드하는 경우 공급업체는 새 HAL 버전을 구현하고 타겟 FMC 버전을 증분할 수 있습니다.
새 기기 개발
새 기기의 기기 타겟 FCM 버전을 정의하는 경우 다음을 실행합니다.
DEVICE_MANIFEST_FILE
및PRODUCT_ENFORCE_VINTF_MANIFEST
를 정의되지 않은 상태로 둡니다.- 타겟 FCM V버전의 HAL을 구현합니다.
- 올바른 기기 매니페스트 파일을 작성합니다.
- 타겟 FCM 버전을 기기 매니페스트 파일에 작성합니다.
DEVICE_MANIFEST_FILE
을 설정합니다.PRODUCT_ENFORCE_VINTF_MANIFEST
를true
로 설정합니다.
새 기기 출시
새 기기가 출시되면 기기 매니페스트에서 초기 타겟 FCM 버전을 확인하고 최상위 수준 <manifest>
요소의 'target-level
' 속성으로 선언해야 합니다.
예를 들어 Android 9로 출시되는 기기는 타겟 FCM 버전이 3(현 시점에 제공되는 높은 버전)이어야 합니다. 이를 기기 매니페스트에 선언하려면 다음을 실행합니다.
<manifest version="1.0" type="device" target-level="3"> <!-- ... --> </manifest>
공급업체 이미지 업그레이드
기존 기기의 공급업체 이미지를 업그레이드하는 경우 공급업체는 새 HAL 버전을 구현하고 타겟 FMC 버전을 증분할 수 있습니다.
HAL 업그레이드
공급업체 이미지 업그레이드가 진행되는 동안 공급업체는 새로운 HAL 버전을 구현할 수 있습니다. 단, HAL 이름, 인터페이스 이름과 인스턴스 이름이 같아야 합니다. 예:
- 필수 오디오 2.0 HAL
android.hardware.audio@2.0::IDeviceFactory/default
를 구현한 타겟 FCM 버전 2로 출시된 Google Pixel 2 및 Pixel 2 XL 기기 - Android 9로 출시된 오디오 4.0 HAL의 경우 Google Pixel 2 및 Pixel 2 XL 기기에서 전체 OTA를 사용하여
android.hardware.audio@4.0::IDeviceFactory/default
를 구현하는 4.0 HAL로 업그레이드할 수 있습니다. compatibility_matrix.2.xml
은 오디오 2.0만 지정하지만 타겟 FCM 버전 2가 적용된 공급업체 이미지에 관한 요구사항은 완화되었습니다. Android 9 프레임워크(FCM 버전 3)가 기능 면에서 오디오 4.0을 오디오 2.0 HAL의 대체 요소로 고려하기 때문입니다.
요약하면 compatibility_matrix.2.xml
에는 오디오 2.0이 필요하고 compatibility_matrix.3.xml
에는 오디오 4.0이 필요하다는 점을 감안할 때 요구사항은 다음과 같습니다.
FCM 버전(시스템) | FCM 버전 타겟팅(공급업체) | 요구사항 |
---|---|---|
2(8.1) | 2(8.1) | 오디오 2.0 |
3(9) | 2(8.1) | 오디오 2.0 또는 4.0 |
3(9) | 3(9) | 오디오 4.0 |
타겟 FCM 버전 업그레이드
공급업체 이미지 업그레이드가 진행되는 동안 공급업체는 타겟 FCM 버전을 증분하여 업그레이드된 공급업체 이미지에서 사용 가능한 타겟팅된 FCM 버전을 지정할 수 있습니다. 기기의 타겟 FCM 버전을 범프하려면 공급업체는 다음을 실행해야 합니다.
- 타겟 FCM 버전에 필요한 모든 새 HAL 버전을 구현합니다.
- 기기 매니페스트 파일에서 HAL 버전을 수정합니다.
- 기기 매니페스트 파일에서 타겟 FCM 버전을 수정합니다.
- 지원 중단된 HAL 버전을 제거합니다.
예를 들어 Google Pixel 및 Pixel XL 기기는 Android 7.0으로 출시되었으므로 타겟 FCM 버전이 최소 레거시여야 합니다. 하지만 공급업체 이미지가 compatibility_matrix.2.xml
과 일치하도록 업데이트되었으므로 기기 매니페스트에서 타겟 FCM 버전 2를 선언합니다.
<manifest version="1.0" type="device" target-level="2">
공급업체에서 모든 새로운 필수 HAL 버전을 구현하지 않거나 지원 중단된 HAL 버전을 제거하지 않으면 타겟 FCM 버전을 업그레이드할 수 없습니다.
예를 들어 Google Pixel 2 및 Pixel 2 XL 기기는 타겟 FCM 버전 2를 보유합니다.
이러한 기기는 compatibility_matrix.3.xml
(예: 오디오 4.0, 상태 2.0 등)에 필요한 일부 HAL을 구현하지만 FCM 버전 3(Android 9)에서 지원 중단된 android.hardware.radio.deprecated@1.0
은 삭제하지 않습니다. 따라서 이러한 기기는 타겟 FCM 버전을 3으로 업그레이드할 수 없습니다.
OTA 도중의 커널 요구사항 지시
Android 9 이하에서 기기 업데이트
Android 9 이하 버전의 기기에서는 다음과 같은 CL이 선별됩니다.
이러한 변경사항으로 빌드 플래그 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
가 도입되고 Android 9 이하로 출시된 기기에는 플래그를 설정하지 않은 상태로 둡니다.
- Android 10으로 업데이트하는 경우 Android 9 이하를 실행하는 기기의 OTA 클라이언트는 OTA 패키지의 커널 요구사항을 제대로 확인하지 않습니다. 이러한 변경사항은 생성된 OTA 패키지의 커널 요구사항을 취소하는 데 필요합니다.
- Android 11로 업데이트하는 경우
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
빌드 플래그를 설정하여 업데이트 패키지 생성 시 VINTF 호환성을 확인하는 것은 선택사항입니다.
빌드 플래그에 관한 자세한 내용은 Android 10에서 기기 업데이트를 참고하세요.
Android 10에서 기기 업데이트
Android 10에서는 새로운 빌드 플래그 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
가 도입되었습니다. Android 10으로 출시된 기기의 경우 이 플래그가 true
로 자동 설정됩니다. 플래그가 true
로 설정되면 스크립트는 설치된 커널 이미지에서 커널 버전과 커널 구성을 추출합니다.
- Android 10으로 업데이트하는 경우 OTA 업데이트 패키지에는 커널 버전 및 구성이 포함됩니다. Android 10을 실행하는 기기의 OTA 클라이언트는 이 정보를 읽어 호환성을 확인합니다.
- Android 11로 업데이트하는 경우 OTA 패키지 생성 시 커널 버전 및 구성을 읽어 호환성을 확인합니다.
스크립트가 커널 이미지의 이 정보를 추출하지 못하면 다음 중 하나를 따르세요.
- 커널 형식을 지원하고 AOSP에 도움이 되도록 스크립트를 수정합니다.
BOARD_KERNEL_VERSION
을 커널 버전으로 설정하고BOARD_KERNEL_CONFIG_FILE
을 빌드된 커널 구성 파일.config
의 경로로 설정합니다. 커널 이미지가 업데이트되면 두 변수 모두 업데이트되어야 합니다.- 또는
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
를false
로 설정하여 커널 요구사항 확인을 건너뜁니다. 이 방법은 권장되지 않습니다. 비호환성이 숨겨져 있고 업데이트 후에 VTS 테스트를 실행할 때만 발견되기 때문입니다.
커널 정보 추출 스크립트 extract_kernel.py
의 소스 코드를 확인할 수 있습니다.