Tworzenie pakietów OTA

Możesz użyć narzędzia ota_from_target_files udostępnionego 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 niebędących A/B. Narzędzie pobiera Plik target-files.zip wygenerowany przez system kompilacji Androida jako dane wejściowe.

Na urządzeniach z Androidem 11 lub nowszym możesz tworzyć 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 warunków końcowych.

Wycofane pakiety OTA w Androidzie 8.0 dla urządzeń innych niż A/B, które muszą zamiast tego użyj blokowanych pakietów OTA. 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 poniższe 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 formacie $OUT). Wygenerowany plik .zip zawiera wszystko, co jest potrzebne do tworzenia pakietów OTA na urządzenie tardis. Możesz również skompilować plik ota_from_target_files jako plik binarny Pythona i wywołać go tworzyć pakiety pełne lub przyrostowe.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

Ścieżka ota_from_target_files jest skonfigurowana w $PATH, a wynikowy 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żywaj własnych kluczy prywatnych jako: Szczegółowy opis znajdziesz w artykule Podpisywanie kompilacji do opublikowania.

Tworzenie aktualizacji przyrostowych

Aktualizacja przyrostowa to pakiet OTA, który zawiera binarne poprawki danych. zapisanych już na urządzeniu. Pakiety z aktualizacjami przyrostowymi są zwykle mniejsze, ponieważ nie muszą zawierać niezmienionych plików. Ponadto z powodu tego, że 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 przyrostowych możesz zainstalować tylko na urządzeniach, które mają kompilację źródłową używaną podczas tworzenia 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 kompilacja jest bardzo podobna do poprzedniej, a aktualizacja przyrostowa pakiet (incremental_ota_update.zip) jest znacznie mniejszy od odpowiadającego mu pełna aktualizacja (około 1 MB zamiast 60 MB).

Rozpowszechniaj pakiet przyrostowy tylko na urządzeniach, które działają dokładnie tak samo jako punktu początkowego 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 z 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ą skompilowaną spowoduje błąd instalacji. Gdy instalacja kończy się niepowodzeniem, urządzenie pozostaje w tym samym stanie (ze starym systemem system); pakiet weryfikuje poprzedni stan wszystkich aktualizacji wszystkich plików przed dotknięciem, dzięki czemu urządzenie nie będzie zawieszone w połowie.

Aby zapewnić użytkownikom jak najlepsze wrażenia, oferuj pełną aktualizację co 3–4 aktualizacje. Dzięki temu użytkownicy będą mogli zapoznać się z najnowszą wersją i uniknąć sekwencji instalacji przyrostowych aktualizacji.

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 kodu SKU to odmiana połączonej kompilacji i wartości parametru, jest zwykle niezadeklarowanym podzbiorem bieżących parametrów build_fingerprint. OEM może używać dowolnej kombinacji parametrów kompilacji zatwierdzonych przez CDD dla kodu SKU, za pomocą jednego zdjęcia 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 wersja sprzętowa (np. radio)
  • modifierC to region, który może być ogólny (np. NA, EMEA lub 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. Ten proces upraszcza proces programowania platformy, umożliwiając obsługę urządzeń ale różne wersje produktu, aby udostępnić wspólne zdjęcia (np. tardis i tardispro).

Używanie dynamicznych odcisków palca

Odcisk cyfrowy to zdefiniowana konkatenacja słowa build parametry takie jak: ro.product.brand, ro.product.name i ro.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ć dynamic odcisk palca, użyj dynamicznej logiki w pliku build.prop urządzenia, aby pobrać wartość zmiennych programu rozruchowego w momencie uruchomienia urządzenia, a następnie użyć tych danych do utworzyć dynamiczny odcisk palca dla tego urządzenia.

Aby na przykład używać dynamicznych odcisków palców na urządzeniach z systemem tardis i tardispro, 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, tak aby zawierał następujący wiersz.

    ro.odm.product.device=tardispro
    
  • Zaktualizuj plik odm/etc/build.prop, aby zawierał te wiersze.

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

Wiersze te dynamicznie ustawiają nazwę urządzenia, odcisk palca ro.build.fingerprint na podstawie wartości atrybutu Właściwość programu rozruchowego ro.boot.product.hardware.sku (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 kierowane na urządzenie z systemem 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 pochodzi z właściwości kompilacji ro.product.device.
  • Wartości pre-build-incremental i post-build-incremental są wyliczane z właściwości kompilacji ro.build.version.incremental.
  • Wartości pre-buildpost-build są określane na podstawie właściwości kompilacji ro.build.fingerprint.

Na urządzeniach z Androidem 11 lub nowszym możesz używać tej funkcji: flagę --boot_variable_file w narzędziach OTA, aby podać ścieżkę do pliku, zawiera wartości zmiennych środowiska wykonawczego używanych do tworzenia dynamiczny odcisk cyfrowy. Następnie dane są używane do aktualizowania metadanych OTA w celu uwzględnienia nazwy i odcisków palców urządzenia w warunkach pre-post- (z użyciem znaku ukośnika | jako separatora). Flaga --boot_variable_file zawiera element z poniższą składnią i opisem.

  • 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 cyfrowych środowiska wykonawczego gdy niektóre właściwości ro.product.* zostały zastąpione instrukcją importu. Plik wymaga 1 właściwości w każdym wierszu, w którym każdy wiersz zawiera: format: prop_name=value1,value2.

Jeśli na przykład właściwość to ro.boot.product.hardware.sku=std,pro, atrybut Metadane OTA urządzenia z systemem tardis i tardispro są przedstawione 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 uzyskać dostęp do tej funkcji na urządzeniach z Androidem 10, zapoznaj się z dokumentacją implementacji. Ta lista zmian przetwarza warunkowo instrukcje import w pliku build.prop, co umożliwia rozpoznawanie zastąpieni właściwości i odzwierciedlanie ich w końcowych metadanych OTA.