Aktualizacje inne niż AB to wycofana metoda OTA używana przez starsze urządzenia z Androidem (Android 6 i starsze). Te urządzenia mają specjalną partycję odzyskiwania, na której znajduje się oprogramowanie potrzebne do rozpakowania pobranego pakietu aktualizacji i zastosowania aktualizacji do innych partycji.
Na starszych urządzeniach z Androidem bez partycji A/B przestrzeń flash zwykle zawiera te partycje:
- rozruch
- Zawiera jądro Linuxa i minimalny system plików głównych (załadowany na dysk RAM). Zamontuj system i inne partycje oraz uruchom środowisko uruchomieniowe znajdujące się na partycji systemowej.
- system
- Zawiera aplikacje systemowe i biblioteki, których kod źródłowy jest dostępny w ramach Projektu Android Open Source (AOSP). Podczas normalnej pracy ta partycja jest montowana tylko do odczytu; jej zawartość zmienia się tylko podczas aktualizacji OTA.
- firma
- Zawiera aplikacje i biblioteki systemowe, których nie można uruchomić w ramach Projektu Android Open Source (AOSP). Podczas normalnej pracy ten partycja jest zamontowana tylko do odczytu; jej zawartość zmienia się tylko podczas aktualizacji OTA.
- userdata
- Przechowuje dane zapisane przez aplikacje zainstalowane przez użytkownika. Ta partycja nie jest zwykle modyfikowana przez proces aktualizacji OTA.
- Pamięć podręczna
- Tymczasowa partycja używana przez kilka aplikacji (dostęp do tej partycji wymaga specjalnych uprawnień aplikacji) oraz do przechowywania pobranych pakietów aktualizacji OTA. Inne programy korzystają z tego miejsca, zakładając, że pliki mogą zniknąć w każdej chwili. Niektóre instalacje pakietów OTA mogą spowodować całkowite wyczyszczenie tej partycji. Pamięć podręczna zawiera też logi aktualizacji z aktualizacji OTA.
- dojście do siebie
- Zawiera drugi kompletny system Linux, w tym jądro i specjalny binarny obraz odzyskiwania, który odczytuje pakiet i użyje jego zawartości do zaktualizowania innych partycji.
- misc
- Mała partycja używana przez funkcję odzyskiwania do przechowywania informacji o tym, co robi, na wypadek, gdyby urządzenie zostało ponownie uruchomione podczas instalowania pakietu OTA.
Cykl życia aktualizacji OTA
Typowa aktualizacja OTA obejmuje te kroki:
- Urządzenie regularnie sprawdza serwery OTA i jest powiadamiane o dostępności aktualizacji, w tym adres URL pakietu aktualizacji i ciąg znaków opisu, który można wyświetlić użytkownikowi.
-
Aktualizacje są pobierane do pamięci podręcznej lub partycji danych, a ich podpis kryptograficzny jest weryfikowany na podstawie certyfikatów w
/system/etc/security/otacerts.zip
. Użytkownik zostaje poproszony o zainstalowanie aktualizacji. - Urządzenie uruchamia się ponownie w trybie odzyskiwania, w którym rdzeń i system na partycji odzyskiwania są uruchamiane zamiast rdzenia na partycji rozruchowej.
-
Binarny plik odzyskiwania jest uruchamiany przez init. Znajduje w
/cache/recovery/command
argumenty wiersza poleceń, które wskazują na pobrany pakiet. -
Odzyskiwanie weryfikuje podpis kryptograficzny pakietu za pomocą kluczy publicznych w
/res/keys
(część dysku RAM zawarta w partycji odzyskiwania). - Dane są pobierane z opakowania i używane do aktualizacji partycji rozruchowej, systemowej lub dostawcy w razie potrzeby. Jeden z nowych plików znajdujących się na partycji systemowej zawiera zawartość nowej partycji odzyskiwania.
-
Urządzenie uruchamia się normalnie.
- Ładuje się nowo zaktualizowana partycja rozruchu, która jest montowana i rozpoczyna wykonywanie plików binarnych na nowo zaktualizowanej partycji systemowej.
-
Podczas normalnego uruchamiania system porównuje zawartość partycji odzyskiwania z pożądaną zawartością (która była wcześniej zapisana jako plik w
/system
). Jeśli są różne, partycja odzyskiwania jest ponownie zapisywana za pomocą pożądanej zawartości. (podczas kolejnych rozruchów partycja odzyskiwania zawiera już nowe treści, więc nie trzeba ponownie instalować oprogramowania).
Aktualizacja systemu została zakończona. Dzienniki aktualizacji znajdziesz w /cache/recovery/last_log.#
.
Aktualizowanie pakietów
Pakiet aktualizacji to plik .zip
zawierający plik binarny META-INF/com/google/android/update-binary
. Po zweryfikowaniu podpisu pakietu recovery
wyodrębnia plik binarny do /tmp
i uruchamia go, przekazując te argumenty:
- Zaktualizuj numer wersji interfejsu API binarnego. Jeśli argumenty przekazane do funkcji aktualizacji powodują zmianę binarną, ta liczba wzrasta.
- Deskryptor pliku rury poleceń. Program aktualizacji może używać tego kanału do wysyłania poleceń do binarnego pliku odzyskiwania, głównie w celu wprowadzania zmian w interfejsie, takich jak wyświetlanie postępu użytkownikowi.
-
Nazwa pliku pakietu aktualizacji
.zip
.
Pakiet aktualizacji może używać dowolnego statycznie połączonego binarnego pliku binarnego jako binarnego pliku aktualizacji. Narzędzia do tworzenia pakietów OTA korzystają z programu aktualizacyjnego (bootable/recovery/updater
), który zapewnia prosty język skryptowy umożliwiający wykonywanie wielu zadań związanych z instalacją. Możesz zastąpić dowolny inny binarny plik wykonywalny na urządzeniu.
Szczegółowe informacje o binarnym pliku aktualizatora, edycji składni i wbudowanych funkcjach znajdziesz w artykule Informacje o pakietach OTA.
Migracja z poprzednich wersji
Podczas migracji z wersji 2.3, 3.0 lub 4.0 Androida główną zmianą jest przekształcenie wszystkich funkcji związanych z danym urządzeniem z zestawu funkcji C z wstępnie zdefiniowanymi nazwami w obiekty C++. W tabeli poniżej znajdziesz stare funkcje i nowe metody, które służą do mniej więcej tego samego celu:
Funkcja C | Metoda w C++ |
---|---|
device_recovery_start() | Device::RecoveryStart() |
device_toggle_display() device_reboot_now() |
RecoveryUI::CheckKey() (także RecoveryUI::IsKeyPressed()) |
device_handle_key() | Device::HandleMenuKey() |
device_perform_action() | Device::InvokeMenuItem() |
device_wipe_data() | Device::WipeData() |
device_ui_init() | ScreenRecoveryUI::Init() |
Przekształcenie starych funkcji w nowe metody powinno być stosunkowo proste. Pamiętaj, aby dodać nową funkcję make_device()
, która utworzy i zwróci instancję nowej podklasy Device.