Aby utworzyć pełne i przyrostowe
pakiety OTA na urządzenia, które korzystają z aktualizacji systemu A/B lub
aktualizacji systemu innych niż A/B, możesz użyć ota_from_target_files
narzędzia dostępnego w build/make/tools/releasetools. 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ć 1 pakiet OTA na wiele urządzeń z różnymi kodami SKU. W tym celu musisz skonfigurować urządzenia docelowe tak, aby używały dynamicznych odcisków palców i zaktualizować metadane OTA, aby uwzględniały nazwę urządzenia i odcisk palca we wpisach warunków wstępnych i końcowych.
W Androidzie 8.0 wycofano pakiety OTA oparte na plikach w przypadku urządzeń 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, przekaż opcję --block do parametru ota_from_target_files.
Tworzenie pełnych aktualizacji
Pełna aktualizacja to pakiet OTA, który zawiera cały stan końcowy urządzenia (partycje systemowe, rozruchowe i odzyskiwania). Jeśli urządzenie może odbierać i stosować pakiet, pakiet może 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ądzenie tardis.
. build/envsetup.sh && lunch tardis-engmkdir dist_outputmake dist DIST_DIR=dist_output
make dist tworzy pełny pakiet OTA (w $OUT). Wynikowy plik .zip zawiera wszystko, co jest potrzebne do utworzenia pakietów OTA na urządzenie tardis.
Możesz też utworzyć ota_from_target_files jako plik binarny Pythona i wywołać go, aby utworzyć 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 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 kluczem testowym). W przypadku urządzeń użytkowników wygeneruj i użyj własnych kluczy prywatnych zgodnie z opisem w sekcji Podpisywanie kompilacji na potrzeby wersji.
Tworzenie aktualizacji przyrostowych
Aktualizacja przyrostowa to pakiet OTA, który zawiera binarne poprawki danych znajdujących się już na urządzeniu. Pakiety z aktualizacjami przyrostowymi są zwykle mniejsze, ponieważ nie muszą zawierać niezmienionych plików. Ponadto, 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, które mają kompilację źródłową używaną do tworzenia pakietu. Aby utworzyć aktualizację przyrostową,
potrzebujesz pliku target_files.zip z poprzedniej kompilacji (tej, z której chcesz
zaktualizować z) oraz pliku target_files.zip z nowej kompilacji. Na przykład te polecenia używają narzędzi do tworzenia wersji, aby utworzyć aktualizację przyrostową na urządzenie tardis.
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zipTa kompilacja jest bardzo podobna do poprzedniej, 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 na urządzenia, które korzystają z dokładnie tej samej poprzedniej kompilacji używanej jako punkt początkowy pakietu przyrostowego. Zamiast
obrazów w katalogu PRODUCT_OUT (utworzonych za pomocą polecenia make, które zostaną
wgrane za pomocą polecenia fastboot flashall) musisz wgrać
obrazy w PREVIOUS-tardis-target_files.zip lub PREVIOUS-tardis-img.zip (oba utworzone za pomocą polecenia make dist, które zostaną wgrane za pomocą polecenia fastboot update). Próba zainstalowania pakietu przyrostowego
na urządzeniu z inną kompilacją spowoduje błąd instalacji. Gdy instalacja się nie powiedzie, urządzenie pozostanie w tym samym stanie roboczym (z uruchomionym starym systemem); pakiet sprawdza poprzedni stan wszystkich plików, które aktualizuje, zanim je zmodyfikuje, więc urządzenie nie zostanie w stanie częściowej aktualizacji.
Aby zapewnić użytkownikom jak najlepsze wrażenia, oferuj pełną aktualizację co 3–4 aktualizacje przyrostowe. Dzięki temu użytkownicy mogą przejść na najnowszą wersję i uniknąć długiej sekwencji instalacji aktualizacji przyrostowych.
Tworzenie pakietów OTA na wiele kodów SKU
Android 11 lub nowszy obsługuje używanie jednego pakietu OTA na wiele urządzeń z różnymi kodami 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ędniały nazwę urządzenia i odcisk palca we wpisach warunków wstępnych i końcowych.
Kody SKU
Format kodu SKU to odmiana połączonych wartości parametrów kompilacji
, która
zwykle jest 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, a jednocześnie używać jednego obrazu dla tych kodów SKU. Na przykład ten kod SKU ma kilka odmian:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierAto poziom urządzenia (np. Pro, Premium lub Plus),modifierBto odmiana sprzętu (np. radio),modifierCto region, który może być ogólny (np. NA, EMEA lub CHN) albo specyficzny dla kraju lub języka (np. JPN, ENG lub CHN).
Wielu producentów OEM używa jednego obrazu dla wielu kodów SKU, a następnie w czasie działania po uruchomieniu urządzenia uzyskuje ostateczną nazwę produktu i odcisk palca urządzenia. Ten proces
upraszcza proces tworzenia platformy, umożliwiając urządzeniom z niewielkimi
dostosowaniami, ale różnymi nazwami produktów, udostępnianie wspólnych obrazów (np.
tardis i tardispro).
Używanie dynamicznych odcisków palców
Odcisk palca to zdefiniowane połączenie parametrów
kompilacji, takich jak
ro.product.brand, ro.product.name, i ro.product.device. Odcisk palca urządzenia jest uzyskiwany z odcisku palca partycji systemowej i jest używany 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 rozruchowego w czasie uruchamiania urządzenia, a następnie użyj 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 w sposób pokazany poniżej.
Zaktualizuj plik
odm/etc/build_std.prop, aby zawierał ten wiersz.ro.odm.product.device=tardisZaktualizuj plik
odm/etc/build_pro.prop, aby zawierał ten wiersz.ro.odm.product.device=tardisproZaktualizuj 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 programu rozruchowego 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 końcowe pakietu OTA. Na przykład ten kod to plik metadanych pakietu OTA przeznaczonego 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, w jakim musi znajdować się urządzenie, zanim będzie można zainstalować pakiet OTA. Wartości
post-build-incremental i post-build określają stan, w jakim ma się znajdować urządzenie po zainstalowaniu pakietu OTA. Wartości pól pre- i post- są uzyskiwane z tych odpowiednich właściwości kompilacji.
- Wartość
pre-devicejest uzyskiwana z właściwości kompilacjiro.product.device. - Wartości
pre-build-incrementalipost-build-incrementalsą uzyskiwane z właściwości kompilacjiro.build.version.incremental. - Wartości
pre-buildipost-buildsą uzyskiwane 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 określić ścieżkę do pliku, który zawiera wartości zmiennych czasu działania używanych do tworzenia dynamicznego odcisku palca urządzenia. Dane są następnie używane do aktualizowania metadanych OTA, aby uwzględniały nazwę urządzenia i odcisk palca w warunkach pre- i post- (jako separatora używa się znaku potoku |). Flaga --boot_variable_file ma tę składnię i opis.
- Składnia:
--boot_variable_file <path> - Opis: określa ścieżkę do pliku, który zawiera możliwe wartości właściwości
ro.boot.*. Służy do obliczania możliwych odcisków palców w czasie działania, gdy niektóre właściwościro.product.*są zastępowane przez instrukcję importu. Plik oczekuje jednej właściwości w wierszu, a każdy wiersz ma ten format:prop_name=value1,value2.
Na przykład gdy właściwość to ro.boot.product.hardware.sku=std,pro, metadane OTA na urządzenia tardis i tardispro wyglądają tak jak 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 warunkowo analizuje instrukcje import w pliku build.prop, co umożliwia rozpoznawanie zastąpień właściwości i odzwierciedlanie ich w końcowych metadanych OTA.