Aktualizacje systemów innych niż A/B

Na starszych urządzeniach z Androidem bez partycji A/B przestrzeń flash zazwyczaj zawiera następujące partycje:

uruchomić
Zawiera jądro Linuksa i minimalny główny system plików (załadowany na dysk RAM). Montuje system i inne partycje oraz uruchamia środowisko wykonawcze zlokalizowane na partycji systemowej.
system
Zawiera aplikacje systemowe i biblioteki, których kod źródłowy jest dostępny w projekcie Android Open Source Project (AOSP). Podczas normalnej pracy ta partycja jest montowana w trybie tylko do odczytu; jego zawartość zmienia się tylko podczas aktualizacji OTA.
sprzedawca
Zawiera aplikacje systemowe i biblioteki, które nie mają kodu źródłowego dostępnego w projekcie Android Open Source Project (AOSP). Podczas normalnej pracy ta partycja jest montowana w trybie tylko do odczytu; jego zawartość zmienia się tylko podczas aktualizacji OTA.
dane użytkownika
Przechowuje dane zapisane przez aplikacje zainstalowane przez użytkownika itp. Ta partycja zwykle nie jest dotykana przez proces aktualizacji OTA.
Pamięć podręczna
Tymczasowy obszar przechowywania używany przez kilka aplikacji (dostęp do tej partycji wymaga specjalnych uprawnień aplikacji) oraz do przechowywania pobranych pakietów aktualizacji OTA. Inne programy wykorzystują tę przestrzeń, spodziewając się, że pliki mogą zniknąć w dowolnym momencie. Niektóre instalacje pakietów OTA mogą spowodować całkowite wyczyszczenie tej partycji. Pamięć podręczna zawiera także dzienniki aktualizacji z aktualizacji OTA.
powrót do zdrowia
Zawiera drugi kompletny system Linux, łącznie z jądrem i specjalnym plikiem binarnym odzyskiwania, który odczytuje pakiet i wykorzystuje jego zawartość do aktualizacji pozostałych partycji.
różne
Mała partycja używana przez odzyskiwanie do przechowywania niektórych informacji o tym, co robi, w przypadku ponownego uruchomienia urządzenia w trakcie stosowania pakietu OTA.

Życie aktualizacji OTA

Typowa aktualizacja OTA obejmuje następujące kroki:

  1. Urządzenie regularnie loguje się do serwerów OTA i jest powiadamiane o dostępności aktualizacji, łącznie z adresem URL pakietu aktualizacji i ciągiem opisu wyświetlanym użytkownikowi.
  2. Aktualizacja jest pobierana do pamięci podręcznej lub partycji danych, a jej podpis kryptograficzny jest weryfikowany w oparciu o certyfikaty w /system/etc/security/otacerts.zip . Użytkownik zostanie poproszony o zainstalowanie aktualizacji.
  3. Urządzenie uruchamia się ponownie w trybie odzyskiwania, w którym uruchamiane jest jądro i system z partycji odzyskiwania zamiast jądra z partycji rozruchowej.
  4. Plik binarny odzyskiwania jest uruchamiany przez init. Znajduje argumenty wiersza poleceń w /cache/recovery/command , które wskazują pobrany pakiet.
  5. Odzyskiwanie weryfikuje podpis kryptograficzny pakietu względem kluczy publicznych w /res/keys (część dysku RAM znajdująca się na partycji odzyskiwania).
  6. Dane są pobierane z pakietu i w razie potrzeby wykorzystywane do aktualizacji partycji rozruchowej, systemowej i/lub partycji dostawcy. Jeden z nowych plików pozostawionych na partycji systemowej zawiera zawartość nowej partycji odzyskiwania.
  7. Urządzenie uruchamia się ponownie normalnie.
    1. Nowo zaktualizowana partycja rozruchowa zostaje załadowana, a następnie montuje i rozpoczyna wykonywanie plików binarnych na nowo zaktualizowanej partycji systemowej.
    2. W ramach normalnego uruchamiania system sprawdza zawartość partycji odzyskiwania pod kątem żądanej zawartości (która była wcześniej przechowywana jako plik w katalogu /system ). Są różne, więc partycja odzyskiwania jest ponownie flashowana z żądaną zawartością. (Przy kolejnych uruchomieniach partycja odzyskiwania zawiera już nową zawartość, więc nie jest konieczne ponowne flashowanie.)

Aktualizacja systemu została zakończona! Dzienniki aktualizacji można znaleźć w /cache/recovery/last_log. # .

Zaktualizuj pakiety

Pakiet aktualizacji to plik .zip zawierający wykonywalny plik binarny META-INF/com/google/android/update-binary . Po zweryfikowaniu podpisu na pakiecie recovery wyodrębnia ten plik binarny do /tmp i uruchamia plik binarny, przekazując następujące argumenty:

  • Zaktualizuj binarny numer wersji API . Jeśli argumenty przekazane do pliku binarnego aktualizacji ulegną zmianie, liczba ta wzrasta.
  • Deskryptor pliku potoku poleceń . Program aktualizacyjny może używać tego potoku do wysyłania poleceń z powrotem do pliku binarnego odzyskiwania, głównie w celu wprowadzenia zmian w interfejsie użytkownika, takich jak wskazanie użytkownikowi postępu.
  • Nazwa pliku pakietu aktualizacji .zip .

Pakiet aktualizacji może używać dowolnego statycznie połączonego pliku binarnego jako pliku binarnego aktualizacji. Narzędzia do konstruowania pakietów OTA korzystają z programu aktualizacyjnego ( bootable/recovery/updater ), który zapewnia prosty język skryptowy, który może wykonać wiele zadań instalacyjnych. Możesz zastąpić dowolny inny plik binarny działający na urządzeniu.

Aby uzyskać szczegółowe informacje na temat pliku binarnego aktualizatora, składni edify i funkcji wbudowanych, zobacz Inside OTA Packages .

Przeprowadź migrację z poprzednich wersji

Główną zmianą podczas migracji z wersji Androida 2.3/3.0/4.0 jest konwersja wszystkich funkcji specyficznych dla urządzenia z zestawu funkcji C o predefiniowanych nazwach na obiekty C++. W poniższej tabeli wymieniono stare funkcje i nowe metody, które służą mniej więcej równoważnemu celowi:

Funkcja C Metoda C++
urządzenie_recovery_start() Urządzenie::RecoveryStart()
urządzenie_toggle_display()
urządzenie_reboot_now()
RecoveryUI::CheckKey()
(także RecoveryUI::IsKeyPressed())
klucz_uchwytu_urządzenia() Urządzenie::UchwytMenuKey()
urządzenie_wykonuje_akcję() Urządzenie::InvokeMenuItem()
urządzenie_wipe_data() Urządzenie::WipeData()
urządzenie_ui_init() ScreenRecoveryUI::Init()

Konwersja starych funkcji na nowe metody powinna być w miarę prosta. Nie zapomnij dodać nowej funkcji make_device() , aby utworzyć i zwrócić instancję nowej podklasy Device.