기기 매니페스트 개발

공급업체는 새 기기를 개발하고 출시할 때 기기 매니페스트(DM)에 타겟 FCM 버전을 정의하여 선언할 수 있습니다. 기존 기기의 공급업체 이미지를 업그레이드하는 경우 공급업체는 새 HAL 버전을 구현하고 타겟 FMC 버전을 증분할 수 있습니다.

새 기기 개발

새 기기의 기기 타겟 FCM 버전을 정의하는 경우 다음을 실행합니다.

  1. DEVICE_MANIFEST_FILEPRODUCT_ENFORCE_VINTF_MANIFEST를 정의되지 않은 상태로 둡니다.
  2. 타겟 FCM V버전의 HAL을 구현합니다.
  3. 올바른 기기 매니페스트 파일을 작성합니다.
  4. 타겟 FCM 버전을 기기 매니페스트 파일에 작성합니다.
  5. DEVICE_MANIFEST_FILE을 설정합니다.
  6. PRODUCT_ENFORCE_VINTF_MANIFESTtrue로 설정합니다.

새 기기 출시

새 기기가 출시되면 기기 매니페스트에서 초기 타겟 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 버전을 범프하려면 공급업체는 다음을 실행해야 합니다.

  1. 타겟 FCM 버전에 필요한 모든 새 HAL 버전을 구현합니다.
  2. 기기 매니페스트 파일에서 HAL 버전을 수정합니다.
  3. 기기 매니페스트 파일에서 타겟 FCM 버전을 수정합니다.
  4. 지원 중단된 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_REQUIREMENTSfalse로 설정하여 커널 요구사항 확인을 건너뜁니다. 이 방법은 권장되지 않습니다. 비호환성이 숨겨져 있고 업데이트 후에 VTS 테스트를 실행할 때만 발견되기 때문입니다.

커널 정보 추출 스크립트 extract_kernel.py의 소스 코드를 확인할 수 있습니다.