SDV korzysta ze standardowego podejścia Androida do aktualizacji systemu A/B (bezproblemowych). Dokumentacja AOSP dotyczy głównie SDV. Na tej stronie znajdziesz szczegółowe informacje o użyciu związane z SDV oraz znane prawidłowe ścieżki tworzenia i stosowania pakietów aktualizacji.
SDV jest skonfigurowany do korzystania z niewirtualnych aktualizacji A/B. Aby skonfigurować i uruchomić aktualizacje A/B niestandardowej partycji /oem_ab z pakietu usług, zapoznaj się z artykułem Aktualizacje partycji A/B OEM.
Implementowanie interfejsu HAL sterowania rozruchem
Obraz SDV Core dla Cuttlefish (sdv_core_cf) zapewnia standardową implementację HAL sterowania uruchamianiem na podstawie hardware/interfaces/boot/aidl/default/. Inne programy rozruchowe muszą implementować HAL, aby obsługiwać aktualizacje A/B.
Szczegółowe informacje znajdziesz w sekcji Implementowanie HAL sterowania uruchamianiem w dokumentacji AOSP. Aby przetestować implementację, możesz użyć narzędzia bootctl dołączonego do obrazów SDV debugowania (eng i userdebug).
Generowanie pakietu OTA
Więcej informacji znajdziesz w artykule Tworzenie pakietów OTA. Instrukcje na tej stronie są zgodne z dokumentacją AOSP z niewielkimi odstępstwami.
Pełna aktualizacja
W katalogu głównym repozytorium:
source build/envsetup.sh && lunch sdv_core_cf-aosp_current-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output
Te polecenia generują pliki docelowe w katalogu dist_output. W przypadku lokalnych kompilacji sdv_core_cf jest to zwykle sdv_core_cf-target_files-$USER.zip.
Aby utworzyć pakiet OTA, musisz użyć ota_from_target_files. W przeciwieństwie do AOSP pakiet nie jest tworzony jako część m dist.
m ota_from_target_files
ota_from_target_files \
dist_output/sdv_core_cf-target_files-$USER.zip \
ota_update.zip
Aktualizacja przyrostowa
To samo wywołanie ota_from_target_files co w AOSP:
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
Instalowanie pakietu OTA
Aktualizacje są instalowane za pomocą usługi update_engine. Kompilacje debugowania SDV obejmują update_engine_client, które można wykorzystać do debugowania i testowania procesu aktualizacji.
Aby zainstalować pakiet OTA, uruchom:
system/update_engine/scripts/update_device.py ota_update.zip
Jeśli aktualizacja została zainstalowana prawidłowo (stan końcowy to UPDATE_STATUS_UPDATED_NEED_REBOOT, a wynik to ErrorCode::kSuccess), zostanie ona aktywowana przy następnym ponownym uruchomieniu.
Obsługa wersji
W przypadku aktualizacji systemu SDV używa metadanych pakietu OTA Androida, aby określić, czy pakiet OTA spełnia wymagania i może zostać zainstalowany.
W przypadku APEX SDV stosuje koncepcje Androida dotyczące możliwości aktualizacji. Dlatego plik APEX można zaktualizować, jeśli nie jest to plik bootstrap. Bootstrap Pliki APEX muszą być aktualizowane za pomocą aktualizacji systemu i muszą:
- Zadeklarowana wersja jest wyższa niż wersja wstępnie zainstalowana, a obie są równe 1 lub wyższe.
lub
- Zadeklarowana wersja to niepreinstalowany APEX, a wersja jest wyższa niż wersja na liście odrzuconych, jeśli jest na niej wymieniona.
SDV jest zwykle wdrażany w wielu systemach w sieci. Dlatego musisz zadbać o to, aby aktualizacje wprowadzone w jednym systemie były prawidłowo wykonywane. Nawet przy zachowaniu takiej ostrożności nie ma gwarancji, że wszystkie systemy będą mogły się prawidłowo komunikować.
Równie ważne jest aktualizowanie całej sieci, co wymaga, aby aktualizacje pakietów usług były wdrażane na wszystkich komputerach jednocześnie lub nie zawierały zmian powodujących niezgodność. Na przykład niezgodne zmiany w interfejsie.
Chociaż SDV nie udostępnia narzędzi do wykrywania niezgodnych zmian, nasze wytyczne opisują, jak uzgadniać zmiany wprowadzone w interfejsach, oraz przedstawiają sprawdzone metody wdrażania zmian.
Dodatkowo SDV obsługuje mechanizmy wycofywania aktualizacji systemu i APEX. Jeśli system nieumyślnie wejdzie w niezadowalający stan, możemy przywrócić ostatni znany zadowalający stan.