Tworzenie pakietów OTA

Za pomocą narzędzia ota_from_target_files udostępnionego w build/make/tools/releasetools możesz tworzyć pełne i przyrostowe pakiety OTA dla urządzeń korzystających z aktualizacji systemu A/B lub aktualizacji systemu innych niż A/B. Jako dane wejściowe narzędzie pobiera 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 kilku urządzeń z różnymi kodami SKU. Wymaga to skonfigurowania urządzeń docelowych tak, aby używały dynamicznych odcisków cyfrowych, i zaktualizowanie metadanych OTA, tak aby zawierała nazwę urządzenia i odcisk cyfrowy we wpisach dotyczących warunku wstępnego i po.

Wycofane z Androida 8.0 pakiety OTA oparte na plikach dla urządzeń innych niż A/B – zamiast nich należy używać blokowych pakietów OTA. Aby generować oparte na blokach pakiety OTA lub urządzenia z Androidem 7.x lub starszym, przekaż opcję --block do parametru ota_from_target_files.

Kompiluj pełne aktualizacje

Pełna aktualizacja to pakiet OTA, który zawiera cały ostateczny stan urządzenia (partycje systemowe, rozruchowe i przywracanie). Jeśli urządzenie jest w stanie odebrać i zastosować pakiet, można zainstalować kompilację niezależnie od obecnego stanu urządzenia. Na przykład poniższe polecenia używają narzędzi do tworzenia wersji do utworzenia 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 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 plik binarny Pythona i wywołać go, by utworzyć pakiet pełny lub przyrostowy.

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/.

Plik ota_update.zip jest teraz gotowy do wysłania do urządzeń testowych (wszystkie są podpisane kluczem testowym). W przypadku urządzeń użytkowników wygeneruj i używaj własnych kluczy prywatnych zgodnie z opisem w artykule o podpisywaniu kompilacji do publikacji.

Tworzenie aktualizacji przyrostowych

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

Pakiet aktualizacji przyrostowych możesz zainstalować tylko na urządzeniach, których kompilacja źródłowa jest używana do tworzenia pakietu. Aby utworzyć aktualizację przyrostową, potrzebujesz pliku target_files.zip z poprzedniej kompilacji (ten, z którego chcesz zaktualizować) oraz pliku target_files.zip z nowej kompilacji. Na przykład poniższe polecenia używają narzędzi do wersji, aby utworzyć przyrostową aktualizację 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 kompilacji, a pakiet aktualizacji przyrostowych (incremental_ota_update.zip) jest znacznie mniejszy niż odpowiadająca pełna aktualizacja (około 1 MB zamiast 60 MB).

Rozpowszechniaj pakiet przyrostowy tylko na urządzeniach z dokładnie taką samą wcześniejszą kompilacją jak ta używana jako punkt początkowy pakietu przyrostowego. Musisz przeprowadzić flashowanie obrazów w systemie PREVIOUS-tardis-target_files.zip lub PREVIOUS-tardis-img.zip (oba obrazy utworzone przy użyciu make dist – będą Flashowane za pomocą fastboot update), a nie do obrazów z katalogu PRODUCT_OUT (skompilowanego przy użyciu make, który będzie się zmieniał przy użyciu fastboot flashall). Próba zainstalowania pakietu przyrostowego na urządzeniu z inną kompilacją 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 1 pakietu OTA na potrzeby wielu urządzeń o różnych kodach SKU. Wymaga to skonfigurowania urządzeń docelowych tak, aby używały dynamicznych odcisków cyfrowych, i zaktualizowanie metadanych OTA (za pomocą narzędzi OTA), tak aby zawierały nazwę urządzenia i odcisk cyfrowy we wpisach dotyczących stanu przed i po.

Informacje o kodach SKU

Format kodu SKU to odmiana połączonych wartości parametrów kompilacji. Jest to zwykle niezadeklarowany podzbiór bieżących parametrów build_fingerprint. OEM może używać dowolnej kombinacji parametrów kompilacji zatwierdzonych przez CDD dla SKU, a jednocześnie używać pojedynczego obrazu na potrzeby tych kodów. 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 odmiana 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 zdjęcia dla wielu kodów SKU, a po uruchomieniu urządzenia uzyskuje ostateczną nazwę produktu i odcisk cyfrowy urządzenia w czasie działania. Ten proces upraszcza proces tworzenia platformy, umożliwiając korzystanie ze wspólnych obrazów na urządzeniach z niewielkimi dostosowaniami, ale innymi nazwami usług (np. tardis i tardispro).

Używanie dynamicznych odcisków palców

Odcisk cyfrowy to zdefiniowana konkatenacja parametrów kompilacji, np. ro.product.brand, ro.product.name i ro.product.device. Odcisk cyfrowy urządzenia pochodzi z odcisku cyfrowego partycji systemu i jest używany jako unikalny identyfikator obrazów (i bajtów) uruchomionych 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 cyfrowych na urządzeniach z systemami tardis i tardispro, zaktualizuj te pliki w sposób podany poniżej.

  • Zaktualizuj plik odm/etc/build_std.prop, tak 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
    

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

Aktualizacja metadanych pakietu OTA

Pakiet OTA zawiera plik metadanych (META-INF/com/android/metadata), który opisuje pakiet, w tym warunki wstępne i końcowe pakietu OTA. 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-incremental i pre-build określają stan, jaki musi mieć urządzenie, zanim będzie można zainstalować pakiet OTA. Wartości post-build-incremental i post-build określają spodziewany stan urządzenia po zainstalowaniu pakietu OTA. Wartości pól pre- i post- pochodzą z podanych niżej odpowiednich 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 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 Androidem 11 lub nowszym możesz użyć flagi --boot_variable_file w narzędziach OTA, aby podać ścieżkę do pliku zawierającego wartości zmiennych środowiska wykonawczego używanych do tworzenia dynamicznego odcisku cyfrowego 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 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 ma ten format: prop_name=value1,value2.

Jeśli na przykład właściwość to ro.boot.product.hardware.sku=std,pro, metadane OTA urządzeń 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 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.