Tworzenie pakietów OTA

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-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 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.zip

Ta 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>
  • 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 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=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 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-device jest uzyskiwana z właściwości kompilacji ro.product.device.
  • Wartości pre-build-incremental i post-build-incremental są uzyskiwane z właściwości kompilacji ro.build.version.incremental.
  • Wartości pre-build i post-build są uzyskiwane z właściwości kompilacji ro.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ści ro.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.