Twórz pakiety OTA

Możesz użyć narzędzia ota_from_target_files dostępnego w build/make/tools/releasetools do tworzenia pełnych i przyrostowych pakietów OTA dla urządzeń korzystających z aktualizacji systemu A/B lub aktualizacji systemu innych niż A/B . Narzędzie pobiera plik target-files.zip utworzony przez system kompilacji Androida jako dane wejściowe.

W przypadku urządzeń z systemem Android 11 lub nowszym można utworzyć 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 warunków wstępnych i końcowych.

Wycofane pakiety OTA oparte na plikach w systemie Android 8.0 dla urządzeń innych niż A/B, które zamiast tego muszą używać blokowych pakietów OTA . Aby wygenerować oparte na blokach 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 używają narzędzi zwalniających do tworzenia 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 ). Wynikowy plik .zip zawiera wszystko, co jest potrzebne do skonstruowania pakietów OTA dla urządzenia tardis . Możesz także zbudować 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, który zawiera poprawki binarne do 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 ich poprzednich wersji, pakiet musi zawierać jedynie kodowanie różnic między tymi dwoma plikami.

Pakiet aktualizacji przyrostowej można zainstalować tylko na urządzeniach, które mają kompilację źródłową używaną do konstruowania pakietu. Aby skompilować aktualizację przyrostową, potrzebujesz pliku target_files.zip z poprzedniej kompilacji (tej, z której chcesz aktualizować) oraz pliku target_files.zip z nowej kompilacji. Na przykład poniższe polecenia używają narzędzi zwalniających do tworzenia 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, a przyrostowy pakiet aktualizacji ( incremental_ota_update.zip ) jest znacznie mniejszy niż odpowiednia 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 z make dist , aby były flashowane z fastboot update ), zamiast tych w katalogu PRODUCT_OUT (zbudowane z make , co zostanie sflashowany za pomocą fastboot flashall ). Próba zainstalowania pakietu przyrostowego na urządzeniu z inną kompilacją kończy się błędem instalacji. Gdy instalacja się nie powiedzie, urządzenie pozostaje w tym samym stanie roboczym (działa stary system); pakiet weryfikuje poprzedni stan wszystkich aktualizowanych plików przed ich dotknięciem, więc urządzenie nie jest pozostawione w stanie połowicznej aktualizacji.

Aby zapewnić użytkownikom najlepsze wrażenia, 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 instalowania aktualizacji przyrostowych.

Twórz pakiety OTA dla wielu jednostek SKU

Android 11 lub nowszy obsługuje używanie jednego pakietu 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 (za pomocą narzędzi OTA) w celu uwzględnienia nazwy urządzenia i odcisku palca we wpisach warunku wstępnego i końcowego.

Informacje o jednostkach SKU

Format jednostki SKU jest odmianą połączonych wartości parametrów kompilacji i zazwyczaj jest niezadeklarowanym podzbiorem bieżących parametrów build_fingerprint . Producenci OEM mogą używać dowolnej kombinacji parametrów kompilacji zatwierdzonych przez CDD dla jednostki SKU, jednocześnie używając jednego obrazu dla tych jednostek SKU. Na przykład następująca jednostka SKU ma wiele odmian:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA to poziom urządzenia (taki jak Pro, Premium lub Plus)
  • modifierB to odmiana sprzętu (taka jak 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 jednostek SKU, a następnie uzyskuje ostateczną nazwę produktu i odcisk palca urządzenia w czasie wykonywania po uruchomieniu urządzenia. Ten proces upraszcza proces tworzenia platformy, umożliwiając urządzeniom z niewielkimi modyfikacjami, ale różnymi nazwami produktów współdzielenie wspólnych obrazów (takich jak tardis i tardispro ).

Używaj dynamicznych odcisków palców

Odcisk cyfrowy to zdefiniowana konkatenacja 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 jest używany jako unikalny identyfikator obrazów (i bajtów) uruchomionych na urządzeniu. Aby utworzyć dynamiczny odcisk palca, użyj dynamicznej logiki 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 tak, aby zawierał następujący wiersz.

    ro.odm.product.device=tardis
    
  • Zaktualizuj plik odm/etc/build_pro.prop aby zawierał następujący wiersz.

    ro.odm.product.device=tardispro
    
  • Zaktualizuj plik odm/etc/build.prop 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 na podstawie wartości właściwości bootloadera 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 dla pakietu OTA ukierunkowanego 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 definiują stan, jaki musi mieć urządzenie, zanim będzie można zainstalować pakiet OTA. Wartości post-build-incremental i post-build określają oczekiwany stan 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 pochodzi z właściwości kompilacji ro.product.device .
  • Wartości pre-build-incremental i post-build-incremental pochodzą z właściwości kompilacji ro.build.version.incremental .
  • Wartości pre-build i post-build pochodzą 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 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ści ro.product.* są zastępowane przez instrukcję importu. Plik oczekuje jednej właściwości na wiersz, gdzie każdy wiersz 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ą 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 uzyskać informacje na temat obsługi tej funkcji na urządzeniach z systemem Android 10, zapoznaj się z 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.