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 warunków 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 tworzenia wersji, aby utworzyć 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ądzeniu tardis
.
Możesz też skompilować ota_from_target_files
jako binarne 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 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ż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 wersja źródłowa użyta do jego skompilowania. 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 poniższe polecenia używają narzędzi do publikowania w celu utworzenia 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 wersja jest bardzo podobna do poprzedniej, a pakiet aktualizacji cząstkowych (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ą skompilowaną spowoduje błąd instalacji. Jeśli instalacja się nie powiedzie, urządzenie pozostanie w tym samym stanie (z uruchomionym starym systemem). Pakiet sprawdza poprzedni stan wszystkich plików, które aktualizuje, zanim je zmodyfikuje, dzięki czemu urządzenie nie zostanie w półpełnym stanie.
Aby zapewnić użytkownikom jak najlepsze wrażenia, oferuj pełną aktualizację co 3–4 aktualizacje. Pomaga to użytkownikom dostosować się do najnowszej wersji i uniknąć długiej sekwencji instalacji kolejnych 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 SKU to wariant połączonych wartości parametru build i jest zwykle niezadeklarowanym podzbiorem 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 kilka wersji:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
to poziom urządzenia (np. Pro, Premium lub Plus).modifierB
to wariant sprzętowy (np. radio).modifierC
to region, który może być ogólny (np. NA, EMEA lub CHN) lub specyficzny dla 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 palca
Odcisk palca to zdefiniowane konkatenacja parametrów kompilacji, takich jak ro.product.brand
, ro.product.name
i ro.product.device
. Odcisk palca urządzenia jest tworzony na podstawie odcisku palca partycji systemowej i służy jako jednoznaczny 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 bootloadera podczas uruchamiania urządzenia, a następnie użyć tych danych do utworzenia dynamicznego odcisku palca dla 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
, aby zawierał te 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 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ą wyprowadzane z 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
są wyprowadzane 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ć parametru --boot_variable_file
w narzędziach OTA, aby określić ścieżkę do pliku zawierającego wartości zmiennych czasu wykonywania użytych do utworzenia dynamicznego odcisku palca urządzenia. Następnie dane są używane do aktualizowania metadanych OTA w celu uwzględnienia nazwy urządzenia i odcisków palców w warunkach pre-
i post-
(z użyciem znaku ukośnika | jako separatora). 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 w czasie wykonywania, gdy niektóre właściwościro.product.*
są zastąpione przez instrukcję importu. Plik powinien zawierać po 1 właściwości na wiersz, a każdy wiersz powinien mieć taki 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 obsługiwać tę funkcję na urządzeniach z Androidem 10, zapoznaj się z implementacją referencyjną.
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.