Tworzenie pakietów OTA

Możesz użyć narzędzia ota_from_target_files udostępnianego w build/make/tools/releasetools do tworzenia pełnych i przyrostowych pakietów OTA na potrzeby urządzeń, które korzystają z aktualizacji systemu A/B lub aktualizacji systemu innych niż A/B. Narzędzie przyjmuje jako dane wejściowe plik target-files.zip wygenerowany przez system kompilacji Androida.

W przypadku urządzeń z Androidem 11 lub nowszym możesz utworzyć jeden pakiet OTA dla wielu urządzeń z różnymi kodami SKU. Wymaga to skonfigurowania urządzeń docelowych pod kątem korzystania z dynamicznych odcisków palców oraz zaktualizowania metadanych OTA, aby uwzględnić nazwę i odcisk palca urządzenia w rekordach warunków wstępnych i końcowych.

Android 8.0 wycofuje pakiety OTA oparte na plikach na urządzeniach innych niż A/B, które muszą zamiast tego używać pakietów OTA opartych na blokach. Aby wygenerować pakiety OTA oparte na blokach lub urządzenia z Androidem 7.x lub starszym, prześlij opcję --block do parametru ota_from_target_files.

Tworzenie pełnych aktualizacji

Pełna aktualizacja to pakiet OTA zawierający cały stan końcowy urządzenia (partycje systemowa, rozruchowa i odzyskiwania). Jeśli urządzenie może odbierać i stosować pakiet, może on zainstalować kompilację niezależnie od bieżącego stanu urządzenia. Na przykład te polecenia używają narzędzi do publikowania w celu utworzenia archiwum target-files.zip na urządzeniu tardis.

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

make dist tworzy pełny pakiet OTA (w $OUT). Wynikowy plik .zip zawiera wszystko, co jest potrzebne do stworzenia pakietów OTA dla urządzenia tardis. Możesz też skompilować ota_from_target_files jako binarne środowisko Pythona i użyć go do skompilowania pakietów pełnych lub przyrostowych.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

Ścieżka ota_from_target_files jest skonfigurowana w $PATH, a powstały plik binarny Pythona znajduje się w katalogu out/.

ota_update.zip jest teraz gotowy do wysłania na urządzenia testowe (wszystko jest podpisane za pomocą klucza testowego). W przypadku urządzeń użytkowników wygeneruj i użyj własnych kluczy prywatnych zgodnie z instrukcjami w artykule Generowanie kompilacji z podpisem do wydania.

Tworzenie aktualizacji przyrostowych

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

Pakiet aktualizacji przyrostowej możesz zainstalować tylko na urządzeniach, na których jest zainstalowana kompilacja źródłowa użyta do skompilowania pakietu. Aby utworzyć aktualizację przyrostową, potrzebujesz pliku target_files.zip z poprzedniej wersji (tej, którą chcesz zaktualizować), a także pliku target_files.zip z nowej wersji. Na przykład te polecenia używają narzędzi do publikowania, aby utworzyć aktualizację przyrostową 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 wersja jest bardzo podobna do poprzedniej, a pakiet aktualizacji cząstkowej (incremental_ota_update.zip) jest znacznie mniejszy niż odpowiadająca mu pełna aktualizacja (około 1 MB zamiast 60 MB).

Rozpowszechniaj pakiet przyrostowy tylko na urządzeniach, na których działa dokładnie ta sama poprzednia wersja, która posłużyła jako punkt wyjścia dla pakietu przyrostowego. Obrazy w katalogu PREVIOUS-tardis-target_files.zip lub PREVIOUS-tardis-img.zip (oba utworzone za pomocą make dist, które mają być zapisane za pomocą fastboot update) muszą być zapisane w pamięci flash, a nie obrazy w katalogu PRODUCT_OUT (utworzone za pomocą make, które mają być zapisane w pamięci flash za pomocą fastboot flashall). Próba zainstalowania pakietu przyrostowego na urządzeniu z inną wersją spowoduje błąd instalacji. W przypadku niepowodzenia instalacji urządzenie pozostaje w tym samym stanie (z uruchomionym starym systemem). Przed dotknięciem wszystkich aktualizowanych plików pakiet weryfikuje poprzedni stan wszystkich plików, dzięki czemu urządzenie nie będzie rozsiane po awarii.

Aby zadbać o jak najlepsze wrażenia użytkowników, oferuj pełną aktualizację co 3–4 aktualizacje przyrostowe. Pomaga to użytkownikom nadrobić zaległości do najnowszej wersji i uniknąć długiej sekwencji instalacji przyrostowych.

Tworzenie pakietów OTA dla wielu kodów SKU

Android 11 lub nowszy obsługuje używanie jednego pakietu OTA na wielu urządzeniach z różnymi SKU. W tym celu musisz skonfigurować urządzenia docelowe tak, aby używały dynamicznych odcisków palców, i zaktualizować metadane OTA (za pomocą narzędzi OTA), aby uwzględnić nazwę urządzenia i odcisk palca w warunkach wstępnych i końcowych.

Informacje o kodach SKU

Format SKU to wariant połączonych wartości parametru build. Jest to zwykle niezadeklarowana podgrupa bieżących parametrów build_fingerprint. Producenci OEM mogą używać dowolnej kombinacji parametrów kompilacji zatwierdzonych przez CDD w przypadku kodu SKU, używając jednocześnie jednego obrazu dla tych kodów SKU. Na przykład ten kod SKU ma wiele odmian:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA to poziom urządzenia (np. Pro, Premium lub Plus).
  • modifierB to wariant sprzętu (np. radio).
  • modifierC to region, który może być ogólny (np. NA, EMEA czy CHN) albo w zależności od kraju lub języka (np. JPN, ENG lub CHN).

Wielu producentów OEM używa jednego obrazu dla wielu SKU, a następnie wyprowadza ostateczną nazwę produktu i odcisk palca urządzenia w czasie działania po uruchomieniu urządzenia. Upraszcza to proces tworzenia platformy, umożliwiając urządzeniom z niewielkimi modyfikacjami i różnymi nazwami produktów udostępnianie wspólnych obrazów (takich jak tardistardispro).

Używanie dynamicznych odcisków palców

Odcisk palca to zdefiniowane konkatenacja parametrów kompilacji, takich jak ro.product.brand, ro.product.namero.product.device. Odcisk cyfrowy urządzenia jest tworzony na podstawie odcisku cyfrowego partycji systemu i używany jako unikalny identyfikator obrazów (i bajtów) działających na urządzeniu. Aby utworzyć dynamiczny odcisk cyfrowy, użyj dynamicznej logiki w pliku build.prop urządzenia, aby pobrać wartość zmiennych programu rozruchowego w momencie rozruchu urządzenia, a następnie na podstawie tych danych utwórz dynamiczny odcisk cyfrowy tego urządzenia.

Aby na przykład używać dynamicznych odcisków palców na urządzeniach tardistardispro, zaktualizuj te pliki, jak pokazano poniżej.

  • Zaktualizuj plik odm/etc/build_std.prop, aby zawierał ten wiersz.

    ro.odm.product.device=tardis
    
  • Zaktualizuj plik odm/etc/build_pro.prop, aby zawierał ten 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
    

Te wiersze dynamicznie ustawiają nazwę urządzenia, odcisk palca i wartości ro.build.fingerprint na podstawie wartości właściwości bootloadera ro.boot.product.hardware.sku (która jest tylko do odczytu).

Aktualizowanie metadanych pakietu OTA

Pakiet OTA zawiera plik metadanych (META-INF/com/android/metadata), który opisuje pakiet, w tym jego warunki wstępne i warunki końcowe. Na przykład ten kod to plik metadanych pakietu OTA kierowanego na urządzenie 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-incrementalpre-build określają stan, jaki musi mieć urządzenie, aby można było zainstalować pakiet OTA. Wartości post-build-incrementalpost-build określają stan urządzenia po zainstalowaniu pakietu OTA. Wartości pól pre-post- są określane na podstawie tych właściwości kompilacji:

  • Wartość pre-device jest pobierana 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-buildpost-build są oparte na właściwości kompilacji ro.build.fingerprint.

Na urządzeniach z Androidem 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 czasu wykonywania, które są używane do tworzenia dynamicznego odcisku palca urządzenia. Dane te służą następnie do aktualizowania metadanych OTA, aby zawierały nazwę urządzenia i odcisk cyfrowy w warunkach pre- i post- (przy użyciu pionowej kreski | jako separatora). Flaga --boot_variable_file ma taką 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 w czasie wykonywania, gdy niektóre właściwości ro.product.* są zastąpione przez instrukcję importu. Plik powinien zawierać po jednej właściwości na wiersz, a każdy wiersz powinien mieć format: prop_name=value1,value2.

Jeśli na przykład usługa to ro.boot.product.hardware.sku=std,pro, metadane OTA dla urządzeń tardistardispro wyglądają tak, jak pokazano 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 skonfigurować obsługę tej funkcji na urządzeniach z Androidem 10, zapoznaj się z implementacją referencyjną. Ta lista zmian warunkowo analizuje instrukcje import w pliku build.prop, co umożliwia rozpoznawanie i uwzględnianie zastąpień usług w ostatecznych metadanych OTA.