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 tardis
i tardispro
).
Używanie dynamicznych odcisków palców
Odcisk palca to zdefiniowane konkatenacja parametrów kompilacji, takich 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ć 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 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
, 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-incremental
i pre-build
określają stan, jaki musi mieć urządzenie, aby można było zainstalować pakiet OTA. Wartości post-build-incremental
i post-build
określają stan urządzenia po zainstalowaniu pakietu OTA. Wartości pól pre-
i post-
są określane na podstawie tych właściwości kompilacji:
- Wartość
pre-device
jest pobierana z właściwości kompilacjiro.product.device
. - Wartości
pre-build-incremental
ipost-build-incremental
pochodzą z właściwości kompilacjiro.build.version.incremental
. - Wartości
pre-build
ipost-build
są oparte na właściwości kompilacjiro.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ściro.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ń tardis
i tardispro
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.