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 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
pochodzą z 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 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ściro.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.