SDV는 A/B (원활한) 시스템 업데이트의 표준 Android 접근 방식을 따릅니다. AOSP 문서는 주로 SDV에 적용됩니다. 이 페이지에서는 SDV와 관련된 사용법과 업데이트 패키지를 빌드하고 적용하는 알려진 올바른 경로를 자세히 설명합니다.
SDV가 가상 외 A/B 업데이트를 사용하도록 구성되어 있습니다. 서비스 번들에서 맞춤 /oem_ab 파티션의 A/B 업데이트를 구성하고 트리거하려면 OEM AB 파티션 업데이트를 참고하세요.
부팅 제어 HAL 구현
Cuttlefish용 SDV Core 이미지 (sdv_core_cf)는 hardware/interfaces/boot/aidl/default/를 기반으로 부팅 제어 HAL의 표준 구현을 제공합니다. 다른 부트로더는 HAL을 구현하여 A/B 업데이트를 지원해야 합니다.
자세한 내용은 AOSP 문서의 부팅 제어 HAL 구현 섹션을 참고하세요. 디버그 (eng 및 userdebug) SDV 이미지에 포함된 bootctl을 사용하여 구현을 테스트할 수 있습니다.
OTA 패키지 생성
자세한 내용은 OTA 패키지 빌드를 참고하세요. 이 페이지의 안내는 약간의 차이를 제외하고 AOSP 문서를 따릅니다.
전체 업데이트
저장소 루트에서 다음을 실행합니다.
source build/envsetup.sh && lunch sdv_core_cf-aosp_current-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
이러한 명령어는 dist_output 디렉터리에 타겟 파일을 생성합니다. sdv_core_cf의 로컬 빌드의 경우 일반적으로 sdv_core_cf-target_files-$USER.zip입니다.
OTA 패키지를 생성하려면 ota_from_target_files를 사용해야 합니다. AOSP와 달리 패키지는 m dist의 일부로 빌드되지 않습니다.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
증분 업데이트
AOSP와 동일한 ota_from_target_files 호출:
ota_from_target_files \
-i PREVIOUS-sdv_core_cf-target_files.zip \
dist_new/sdv_core_cf-target_files-$USER.zip \
incremental_ota_update.zip
OTA 패키지 설치
업데이트는 update_engine 서비스를 사용하여 설치됩니다. 디버그 SDV 빌드에는 업데이트 프로세스를 디버그하고 테스트하는 데 사용할 수 있는 update_engine_client가 포함됩니다.
OTA 패키지를 설치하려면 다음을 실행합니다.
system/update_engine/scripts/update_device.py ota_update.zip
업데이트가 올바르게 설치되면 (최종 상태가 UPDATE_STATUS_UPDATED_NEED_REBOOT이고 결과가 ErrorCode::kSuccess) 다음 재부팅 시 업데이트가 활성화됩니다.
버전 관리
시스템 업데이트의 경우 SDV는 Android의 OTA 패키지 메타데이터를 사용하여 OTA 패키지가 요구사항을 충족하고 설치할 수 있는지 확인합니다.
또한 APEX의 경우 SDV는 업데이트 가능성과 관련된 Android의 개념을 따릅니다. 따라서 APEX가 부트스트랩 APEX가 아닌 경우 APEX를 업데이트할 수 있습니다. 부트스트랩 APEX는 시스템 업데이트를 통해 업데이트되어야 하며 다음 중 하나를 충족해야 합니다.
- 선언된 버전이 사전 설치된 버전보다 높고 둘 다 1 이상입니다.
또는
- 선언된 버전은 사전 설치되지 않은 APEX이며 버전이 차단 목록에 있는 버전보다 높습니다(나열된 경우).
SDV는 일반적으로 네트워크의 여러 시스템에 배포됩니다. 따라서 단일 시스템에 대한 업데이트가 올바르게 실행되는지 확인해야 합니다. 하지만 이러한 주의를 기울여도 모든 시스템이 제대로 통신할 수 있다고 보장할 수는 없습니다.
전체 네트워크를 업데이트하는 것도 마찬가지로 중요합니다. 이를 위해서는 서비스 번들의 업데이트가 모든 머신에 동시에 배포되거나 업데이트에 브레이킹 체인지가 포함되지 않아야 합니다. 예를 들어 인터페이스에 호환되지 않는 변경사항이 있습니다.
SDV는 호환되지 않는 변경사항을 감지하는 도구를 제공하지 않지만, 가이드라인에서는 인터페이스에 적용된 변경사항을 조정하는 방법과 변경사항을 배포하는 데 필요한 권장사항을 설명합니다.
또한 SDV는 시스템 및 APEX 업데이트를 위한 롤백 메커니즘을 지원합니다. 시스템이 의도치 않게 불만족스러운 상태로 전환되면 마지막으로 알려진 만족스러운 상태를 복구할 수 있습니다.