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

기기 매니페스트 개발

공급업체는 새 기기를 개발하고 출시할 때 기기 매니페스트(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 업데이트를 수신 중인 경우 OTA 업그레이드 패키지를 생성하기 전에 아래의 CL을 선택하세요.

이러한 변경사항으로 빌드 플래그 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS가 도입되고 Android 9 이하로 출시된 기기에는 플래그를 설정하지 않은 상태로 둡니다. Android 9 이하를 실행 중인 기기의 OTA 클라이언트는 OTA 패키지의 커널 요구사항을 올바르게 확인하지 않습니다. 이러한 변경사항은 생성된 OTA 패키지의 커널 요구사항을 취소하는 데 필요합니다. 빌드 플래그에 관한 자세한 내용은 Android 10에서 기기 업데이트를 참조하세요.

이러한 변경사항은 이미 Android 10에 병합되어 있으므로 기기를 Android 10으로 업데이트할 때 선택하지 않아도 됩니다. 하지만 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS는 설정되지 않은 상태로 유지하세요.

Android 10에서 기기 업데이트

Android 10에서는 새로운 빌드 플래그 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS가 도입되었습니다. Android 10으로 출시된 기기의 경우 이 플래그가 true로 자동 설정됩니다. 플래그가 true로 설정되면 스크립트는 설치된 커널 이미지에서 커널 버전과 커널 구성을 추출한 후 이 정보를 OTA 패키지 메타데이터에 작성합니다. Android 10 이상을 실행하는 기기의 OTA 클라이언트는 이 정보를 읽고 호환성을 확인합니다.

스크립트가 커널 이미지의 이 정보를 추출하는 데 실패하면 다음 중 하나를 실행합니다.

  • BOARD_KERNEL_VERSION을 커널 버전으로 설정하고 BOARD_KERNEL_CONFIG_FILE을 빌드된 커널 구성 파일 .config의 경로로 설정합니다. 커널 이미지가 업데이트되면 두 변수 모두 업데이트되어야 합니다.
  • 또는 PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTSfalse로 설정하여 OTA 패키지에서 커널 요구사항을 삭제합니다.

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