Możesz użyć narzędzia ota_from_target_files
dostępnego w build/make/tools/releasetools
aby zbudować pełne i przyrostowe pakiety OTA dla urządzeń korzystających z aktualizacji systemu A/B lub aktualizacji systemu innego niż A/B . Narzędzie pobiera jako dane wejściowe plik target-files.zip
utworzony przez system kompilacji Androida.
W przypadku urządzeń z systemem Android 11 lub nowszym możesz zbudować jeden pakiet OTA dla wielu urządzeń z różnymi jednostkami SKU. Wymaga to skonfigurowania urządzeń docelowych do korzystania z dynamicznych odcisków palców i zaktualizowania metadanych OTA w celu uwzględnienia nazwy urządzenia i odcisku palca we wpisach stanu wstępnego i końcowego.
Android 8.0 wycofał pakiety OTA oparte na plikach dla urządzeń innych niż A/B, które zamiast tego muszą korzystać z pakietów OTA opartych na blokach . Aby wygenerować blokowe pakiety OTA lub urządzenia z systemem Android 7.x lub starszym, przekaż opcję --block
do parametru ota_from_target_files
.
Twórz pełne aktualizacje
Pełna aktualizacja to pakiet OTA, który zawiera cały końcowy stan urządzenia (partycje systemowe, rozruchowe i odzyskiwania). Dopóki urządzenie jest w stanie odebrać i zastosować pakiet, pakiet może zainstalować kompilację niezależnie od bieżącego stanu urządzenia. Na przykład poniższe polecenia wykorzystują narzędzia do tworzenia wersji w celu zbudowania 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
buduje pełny pakiet OTA (w $OUT
). Powstały plik .zip
zawiera wszystko, co potrzebne do skonstruowania pakietów OTA dla urządzenia tardis
. Możesz także zbudować plik ota_from_target_files
jako plik binarny Pythona i wywołać go, aby zbudować pełne lub przyrostowe pakiety.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
Ścieżka ota_from_target_files
jest ustawiona w $PATH
, a wynikowy plik binarny Pythona znajduje się w katalogu out/
.
ota_update.zip
jest już gotowy do wysłania na urządzenia testowe (wszystko jest podpisane kluczem testowym). W przypadku urządzeń użytkowników wygeneruj i używaj własnych kluczy prywatnych zgodnie z opisem w sekcji Podpisywanie kompilacji do wydania .
Twórz aktualizacje przyrostowe
Aktualizacja przyrostowa to pakiet OTA zawierający poprawki binarne do danych znajdujących się już na urządzeniu. Pakiety z aktualizacjami przyrostowymi są zazwyczaj mniejsze, ponieważ nie muszą zawierać niezmienionych plików. Ponadto, ponieważ zmienione pliki są często bardzo podobne do swoich poprzednich wersji, pakiet musi jedynie zawierać kodowanie różnic między dwoma plikami.
Pakiet aktualizacji przyrostowej można zainstalować tylko na urządzeniach, których kompilacja źródłowa została użyta podczas konstruowania pakietu. Aby zbudować aktualizację przyrostową, potrzebujesz pliku target_files.zip
z poprzedniej kompilacji (tej, z której chcesz dokonać aktualizacji ), a także pliku target_files.zip
z nowej kompilacji. Na przykład poniższe polecenia wykorzystują narzędzia do wydania w celu zbudowania 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 kompilacja jest bardzo podobna do poprzedniej wersji, a pakiet aktualizacji przyrostowej ( incremental_ota_update.zip
) jest znacznie mniejszy niż odpowiadająca mu pełna aktualizacja (około 1 MB zamiast 60 MB).
Dystrybuuj pakiet przyrostowy tylko do urządzeń, na których działa dokładnie ta sama poprzednia kompilacja, która była punktem początkowym pakietu przyrostowego. Musisz sflashować obrazy w PREVIOUS-tardis-target_files.zip
lub PREVIOUS-tardis-img.zip
(oba zbudowane za pomocą make dist
, które mają być flashowane za pomocą fastboot update
), zamiast tych w katalogu PRODUCT_OUT
(zbudowane za pomocą make
, które zostanie sflashowany za pomocą fastboot flashall
). Próba zainstalowania pakietu przyrostowego na urządzeniu z inną kompilacją kończy się błędem instalacji. W przypadku niepowodzenia instalacji urządzenie pozostaje w tym samym stanie roboczym (ze starym systemem); pakiet weryfikuje poprzedni stan wszystkich plików, które aktualizuje przed ich dotknięciem, dzięki czemu urządzenie nie jest osierocone w stanie w połowie zaktualizowanym.
Aby zapewnić najlepszą wygodę użytkowania, oferuj pełną aktualizację co 3–4 aktualizacje przyrostowe. Pomaga to użytkownikom nadrobić zaległości w najnowszej wersji i uniknąć długiej sekwencji instalacji aktualizacji przyrostowych.
Twórz pakiety OTA dla wielu jednostek SKU
Android 11 lub nowszy obsługuje korzystanie z jednego pakietu OTA dla wielu urządzeń z różnymi numerami SKU. Wymaga to skonfigurowania urządzeń docelowych do korzystania z dynamicznych odcisków palców i aktualizacji metadanych OTA (przy użyciu narzędzi OTA) w celu uwzględnienia nazwy urządzenia i odcisku palca we wpisach warunków przed i po.
Informacje o jednostkach SKU
Format jednostki SKU jest odmianą połączonych wartości parametrów kompilacji i zazwyczaj stanowi niezadeklarowany podzbiór bieżących parametrów build_fingerprint
. Producenci OEM mogą używać dowolnej kombinacji parametrów kompilacji zatwierdzonych przez CDD dla jednostek SKU, jednocześnie używając pojedynczego obrazu dla tych jednostek SKU. Na przykład następujący 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 (taka jak radio) -
modifierC
to region, który może być ogólny (taki jak NA, EMEA lub CHN) lub specyficzny dla kraju lub języka (taki jak JPN, ENG lub CHN)
Wielu producentów OEM używa jednego obrazu dla wielu jednostek SKU, a następnie uzyskuje ostateczną nazwę produktu i odcisk palca urządzenia w czasie wykonywania, po uruchomieniu urządzenia. Proces ten upraszcza proces tworzenia platformy, umożliwiając urządzeniom z niewielkimi dostosowaniami, ale różnymi nazwami produktów, udostępnianie wspólnych obrazów (takich jak tardis
i tardispro
).
Używaj dynamicznych odcisków palców
Odcisk palca to zdefiniowana kombinacja parametrów kompilacji, takich jak ro.product.brand
, ro.product.name
i ro.product.device
. Odcisk palca urządzenia pochodzi z odcisku palca partycji systemowej i służy jako unikalny 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 programu ładującego podczas uruchamiania urządzenia, a następnie użyj tych danych do utworzenia dynamicznego odcisku palca dla tego urządzenia.
Na przykład, aby używać dynamicznych odcisków palców dla urządzeń tardis
i tardispro
, zaktualizuj następujące pliki, jak pokazano poniżej.
Zaktualizuj plik
odm/etc/build_std.prop
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
Linie te dynamicznie ustawiają nazwę urządzenia, odcisk palca i wartości ro.build.fingerprint
w oparciu o wartość właściwości programu ładującego ro.boot.product.hardware.sku
(która jest tylko do odczytu).
Zaktualizuj metadane pakietu OTA
Pakiet OTA zawiera plik metadanych ( META-INF/com/android/metadata
), który opisuje pakiet, w tym warunek wstępny i końcowy pakietu OTA. Na przykład poniższy kod to plik metadanych pakietu OTA przeznaczonego dla urządzenia 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
definiują stan, jaki musi mieć urządzenie, zanim będzie można zainstalować pakiet OTA. Wartości post-build-incremental
i post-build
definiują stan, w jakim oczekuje się urządzenia po zainstalowaniu pakietu OTA. Wartości pól pre-
i post-
pochodzą z następujących odpowiednich właściwości kompilacji.
- Wartość
pre-device
jest wyprowadzana 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 systemem Android 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 wykonawczych używanych do tworzenia dynamicznego odcisku palca urządzenia. Dane są następnie wykorzystywane do aktualizacji metadanych OTA w celu uwzględnienia nazwy urządzenia i odcisku palca w warunkach pre-
i post-
(przy użyciu znaku kreski | jako ogranicznika). 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 środowiska wykonawczego, gdy niektóre właściwościro.product.*
zostaną zastąpione instrukcją import. Plik oczekuje jednej właściwości na linię, przy czym każda linia ma następujący format:prop_name=value1,value2
.
Na przykład, gdy właściwość to ro.boot.product.hardware.sku=std,pro
, metadane OTA dla urządzeń tardis
i tardispro
są pokazane 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 systemem Android 10, zobacz implementację referencyjną . Ta lista zmian warunkowo analizuje instrukcje import
w pliku build.prop
, co umożliwia rozpoznanie nadpisań właściwości i odzwierciedlenie ich w końcowych metadanych OTA.