Twórz pakiety OTA

Możesz użyć narzędzia ota_from_target_files dostępnego w build/make/tools/releasetools aby zbudować pełne i przyrostowe pakiety OTA dla urządzeń korzystających z aktualizacji systemu A/B lub aktualizacji systemu innego niż A/B . Narzędzie pobiera jako dane wejściowe plik target-files.zip utworzony przez system kompilacji Androida.

W przypadku urządzeń z systemem Android 11 lub nowszym możesz zbudować jeden pakiet OTA dla wielu urządzeń z różnymi jednostkami SKU. Wymaga to skonfigurowania urządzeń docelowych do korzystania z dynamicznych odcisków palców i zaktualizowania metadanych OTA w celu uwzględnienia nazwy urządzenia i odcisku palca we wpisach stanu wstępnego i końcowego.

Android 8.0 wycofał pakiety OTA oparte na plikach dla urządzeń innych niż A/B, które zamiast tego muszą korzystać z pakietów OTA opartych na blokach . Aby wygenerować blokowe pakiety OTA lub urządzenia z systemem Android 7.x lub starszym, przekaż opcję --block do parametru ota_from_target_files .

Twórz pełne aktualizacje

Pełna aktualizacja to pakiet OTA, który zawiera cały końcowy stan urządzenia (partycje systemowe, rozruchowe i odzyskiwania). Dopóki urządzenie jest w stanie odebrać i zastosować pakiet, pakiet może zainstalować kompilację niezależnie od bieżącego stanu urządzenia. Na przykład poniższe polecenia wykorzystują narzędzia do tworzenia wersji w celu zbudowania archiwum target-files.zip dla urządzenia tardis .

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist buduje pełny pakiet OTA (w $OUT ). Powstały plik .zip zawiera wszystko, co potrzebne do skonstruowania pakietów OTA dla urządzenia tardis . Możesz także zbudować plik ota_from_target_files jako plik binarny Pythona i wywołać go, aby zbudować pełne lub przyrostowe pakiety.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

Ścieżka ota_from_target_files jest ustawiona w $PATH , a wynikowy plik binarny Pythona znajduje się w katalogu out/ .

ota_update.zip jest już gotowy do wysłania na urządzenia testowe (wszystko jest podpisane kluczem testowym). W przypadku urządzeń użytkowników wygeneruj i używaj własnych kluczy prywatnych zgodnie z opisem w sekcji Podpisywanie kompilacji do wydania .

Twórz aktualizacje przyrostowe

Aktualizacja przyrostowa to pakiet OTA zawierający poprawki binarne do danych znajdujących się już na urządzeniu. Pakiety z aktualizacjami przyrostowymi są zazwyczaj mniejsze, ponieważ nie muszą zawierać niezmienionych plików. Ponadto, ponieważ zmienione pliki są często bardzo podobne do swoich poprzednich wersji, pakiet musi jedynie zawierać kodowanie różnic między dwoma plikami.

Pakiet aktualizacji przyrostowej można zainstalować tylko na urządzeniach, których kompilacja źródłowa została użyta podczas konstruowania pakietu. Aby zbudować aktualizację przyrostową, potrzebujesz pliku target_files.zip z poprzedniej kompilacji (tej, z której chcesz dokonać aktualizacji ), a także pliku target_files.zip z nowej kompilacji. Na przykład poniższe polecenia wykorzystują narzędzia do wydania w celu zbudowania aktualizacji przyrostowej dla urządzenia tardis .

ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

Ta kompilacja jest bardzo podobna do poprzedniej wersji, a pakiet aktualizacji przyrostowej ( incremental_ota_update.zip ) jest znacznie mniejszy niż odpowiadająca mu pełna aktualizacja (około 1 MB zamiast 60 MB).

Dystrybuuj pakiet przyrostowy tylko do urządzeń, na których działa dokładnie ta sama poprzednia kompilacja, która była punktem początkowym pakietu przyrostowego. Musisz sflashować obrazy w PREVIOUS-tardis-target_files.zip lub PREVIOUS-tardis-img.zip (oba zbudowane za pomocą make dist , które mają być flashowane za pomocą fastboot update ), zamiast tych w katalogu PRODUCT_OUT (zbudowane za pomocą make , które zostanie sflashowany za pomocą fastboot flashall ). Próba zainstalowania pakietu przyrostowego na urządzeniu z inną kompilacją kończy się błędem instalacji. W przypadku niepowodzenia instalacji urządzenie pozostaje w tym samym stanie roboczym (ze starym systemem); pakiet weryfikuje poprzedni stan wszystkich plików, które aktualizuje przed ich dotknięciem, dzięki czemu urządzenie nie jest osierocone w stanie w połowie zaktualizowanym.

Aby zapewnić najlepszą wygodę użytkowania, oferuj pełną aktualizację co 3–4 aktualizacje przyrostowe. Pomaga to użytkownikom nadrobić zaległości w najnowszej wersji i uniknąć długiej sekwencji instalacji aktualizacji przyrostowych.

Twórz pakiety OTA dla wielu jednostek SKU

Android 11 lub nowszy obsługuje korzystanie z jednego pakietu OTA dla wielu urządzeń z różnymi numerami SKU. Wymaga to skonfigurowania urządzeń docelowych do korzystania z dynamicznych odcisków palców i aktualizacji metadanych OTA (przy użyciu narzędzi OTA) w celu uwzględnienia nazwy urządzenia i odcisku palca we wpisach warunków przed i po.

Informacje o jednostkach SKU

Format jednostki SKU jest odmianą połączonych wartości parametrów kompilacji i zazwyczaj stanowi niezadeklarowany podzbiór bieżących parametrów build_fingerprint . Producenci OEM mogą używać dowolnej kombinacji parametrów kompilacji zatwierdzonych przez CDD dla jednostek SKU, jednocześnie używając pojedynczego obrazu dla tych jednostek SKU. Na przykład następujący kod SKU ma wiele odmian:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA to poziom urządzenia (np. Pro, Premium lub Plus)
  • modifierB to odmiana sprzętu (taka jak radio)
  • modifierC to region, który może być ogólny (taki jak NA, EMEA lub CHN) lub specyficzny dla kraju lub języka (taki jak JPN, ENG lub CHN)

Wielu producentów OEM używa jednego obrazu dla wielu jednostek SKU, a następnie uzyskuje ostateczną nazwę produktu i odcisk palca urządzenia w czasie wykonywania, po uruchomieniu urządzenia. Proces ten upraszcza proces tworzenia platformy, umożliwiając urządzeniom z niewielkimi dostosowaniami, ale różnymi nazwami produktów, udostępnianie wspólnych obrazów (takich jak tardis i tardispro ).

Używaj dynamicznych odcisków palców

Odcisk palca to zdefiniowana kombinacja parametrów kompilacji, takich jak ro.product.brand , ro.product.name i ro.product.device . Odcisk palca urządzenia pochodzi z odcisku palca partycji systemowej i służy jako unikalny identyfikator obrazów (i bajtów) działających na urządzeniu. Aby utworzyć dynamiczny odcisk palca, użyj logiki dynamicznej w pliku build.prop urządzenia, aby uzyskać wartość zmiennych programu ładującego podczas uruchamiania urządzenia, a następnie użyj tych danych do utworzenia dynamicznego odcisku palca dla tego urządzenia.

Na przykład, aby używać dynamicznych odcisków palców dla urządzeń tardis i tardispro , zaktualizuj następujące pliki, jak pokazano poniżej.

  • Zaktualizuj plik odm/etc/build_std.prop aby zawierał następujący wiersz.

    ro.odm.product.device=tardis
    
  • Zaktualizuj plik odm/etc/build_pro.prop tak, aby zawierał następujący wiersz.

    ro.odm.product.device=tardispro
    
  • Zaktualizuj plik odm/etc/build.prop tak, aby zawierał następujące wiersze.

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

Linie te dynamicznie ustawiają nazwę urządzenia, odcisk palca i wartości ro.build.fingerprint w oparciu o wartość właściwości programu ładującego ro.boot.product.hardware.sku (która jest tylko do odczytu).

Zaktualizuj metadane pakietu OTA

Pakiet OTA zawiera plik metadanych ( META-INF/com/android/metadata ), który opisuje pakiet, w tym warunek wstępny i końcowy pakietu OTA. Na przykład poniższy kod to plik metadanych pakietu OTA przeznaczonego dla urządzenia tardis .

post-build=google/tardis/tardis:11/RP1A.200521.001/6516341:userdebug/dev-keys
post-build-incremental=6516341
post-sdk-level=30
post-security-patch-level=2020-07-05
post-timestamp=1590026334
pre-build=google/tardis/tardis:11/RP1A.200519.002.A1/6515794:userdebug/dev-keys
pre-build-incremental=6515794
pre-device=tardis

Wartości pre-device , pre-build-incremental i pre-build definiują stan, jaki musi mieć urządzenie, zanim będzie można zainstalować pakiet OTA. Wartości post-build-incremental i post-build definiują stan, w jakim oczekuje się urządzenia po zainstalowaniu pakietu OTA. Wartości pól pre- i post- pochodzą z następujących odpowiednich właściwości kompilacji.

  • Wartość pre-device jest wyprowadzana z właściwości kompilacji ro.product.device .
  • Wartości pre-build-incremental i post-build-incremental pochodzą z właściwości kompilacji ro.build.version.incremental .
  • Wartości pre-build i post-build pochodzą z właściwości kompilacji ro.build.fingerprint .

Na urządzeniach z systemem Android 11 lub nowszym możesz użyć flagi --boot_variable_file w narzędziach OTA, aby określić ścieżkę do pliku zawierającego wartości zmiennych wykonawczych używanych do tworzenia dynamicznego odcisku palca urządzenia. Dane są następnie wykorzystywane do aktualizacji metadanych OTA w celu uwzględnienia nazwy urządzenia i odcisku palca w warunkach pre- i post- (przy użyciu znaku kreski | jako ogranicznika). Flaga --boot_variable_file ma następującą składnię i opis.

  • Składnia: --boot_variable_file <path>
  • Opis: Określa ścieżkę do pliku zawierającego możliwe wartości właściwości ro.boot.* . Służy do obliczania możliwych odcisków palców środowiska wykonawczego, gdy niektóre właściwości ro.product.* zostaną zastąpione instrukcją import. Plik oczekuje jednej właściwości na linię, przy czym każda linia ma następujący format: prop_name=value1,value2 .

Na przykład, gdy właściwość to ro.boot.product.hardware.sku=std,pro , metadane OTA dla urządzeń tardis i tardispro są pokazane poniżej.

post-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-build=google/tardis/tardis:11/<suffix>|google/tardis/tardispro:11/<suffix>
pre-device=tardis|tardispro

Aby obsługiwać tę funkcję na urządzeniach z systemem Android 10, zobacz implementację referencyjną . Ta lista zmian warunkowo analizuje instrukcje import w pliku build.prop , co umożliwia rozpoznanie nadpisań właściwości i odzwierciedlenie ich w końcowych metadanych OTA.