OTA-Pakete erstellen

Mit dem Tool ota_from_target_files in build/make/tools/releasetools können Sie vollständige und inkrementelle OTA-Pakete für Geräte erstellen, die A/B-Systemupdates oder nicht A/B-Systemupdates verwenden. Das Tool nimmt die vom Android-Buildsystem erstellte target-files.zip-Datei als Eingabe.

Für Geräte mit Android 11 oder höher können Sie Ein OTA-Paket für mehrere Geräte mit unterschiedlichen SKUs Dazu müssen Sie die Zielgeräte so konfigurieren, dass dynamische Fingerabdrücke verwendet werden, und die OTA-Metadaten aktualisieren, um den Gerätenamen und den Fingerabdruck in die Einträge für die Vor- und Nachbedingungen aufzunehmen.

Unter Android 8.0 wurden dateibasierte OTA-Pakete für Nicht-A/B-Geräte eingestellt, die verwenden Sie stattdessen blockbasierte OTA-Pakete. Wenn Sie blockbasierte OTA-Pakete oder Geräte mit Android 7.x oder niedriger generieren möchten, übergeben Sie die Option --block an den Parameter ota_from_target_files.

Vollständige Updates erstellen

Ein vollständiges Update ist ein OTA-Paket, das den gesamten Endstatus des Geräts (System-, Boot- und Wiederherstellungspartitionen) enthält. Solange das Gerät Empfang und Anwendung des Pakets kann das Paket den Build unabhängig vom aktuellen Gerätestatus. In den folgenden Befehlen wird beispielsweise das target-files.zip-Archiv für das tardis-Gerät mit Release-Tools erstellt.

. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output

make dist erstellt ein vollständiges OTA-Paket (in $OUT). Die resultierende .zip-Datei enthält alles, was zum Erstellen von OTA-Paketen für das Gerät tardis erforderlich ist. Sie können ota_from_target_files auch als Python-Binary erstellen und aufrufen, um vollständige oder inkrementelle Pakete zu erstellen.

ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip

Der Pfad ota_from_target_files wird in $PATH eingerichtet und das resultierende Python-Binary befindet sich im Verzeichnis out/.

ota_update.zip kann jetzt an Testgeräte gesendet werden (alles ist signiert) durch den Testschlüssel). Generieren und verwenden Sie für Nutzergeräte eigene private Schlüssel als wie unter Builds für die Veröffentlichung signieren beschrieben.

Inkrementelle Updates erstellen

Ein inkrementelles Update ist ein OTA-Paket, das Binär-Patches für Daten enthält, die sich bereits auf dem Gerät befinden. Pakete mit inkrementellen Updates sind in der Regel kleiner da sie keine unveränderten Dateien enthalten müssen. Da sich geänderte Dateien oft sehr ähnlich wie ihre vorherigen Versionen verhalten, muss das Paket nur eine Codierung der Unterschiede zwischen den beiden Dateien enthalten.

Sie können ein inkrementelles Update-Paket nur auf Geräten installieren, auf denen Quell-Build, der beim Erstellen des Pakets verwendet wurde. Um ein inkrementelles Update zu erstellen, benötigen Sie die Datei target_files.zip aus dem vorherigen Build (das gewünschte from) sowie die target_files.zip-Datei des neuen Builds. In den folgenden Befehlen werden beispielsweise Release-Tools verwendet, um ein inkrementelles Update für das tardis-Gerät zu erstellen.

ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip

Dieser Build ist dem vorherigen Build sehr ähnlich und die inkrementelle Aktualisierung Paket (incremental_ota_update.zip) ist viel kleiner als das entsprechende vollständige Aktualisierung (ca. 1 MB statt 60 MB).

Verteilen Sie ein inkrementelles Paket nur auf Geräte, auf denen genau derselbe vorherige Build ausgeführt wird, der als Ausgangspunkt für das inkrementelle Paket verwendet wurde. Sie müssen die Images in PREVIOUS-tardis-target_files.zip oder PREVIOUS-tardis-img.zip (beide mit make dist erstellt, mit fastboot update geflasht) und nicht die im Verzeichnis PRODUCT_OUT (mit make erstellt, mit fastboot flashall geflasht) flashen. Der Versuch, das inkrementelle Paket mit einer anderen Build-Version auf einem Gerät zu installieren, führt zu einem Installationsfehler. Wenn der Parameter die Installation fehlschlägt, bleibt das Gerät im selben funktionsfähigen Zustand, d. h. die alte System); Das Paket prüft den vorherigen Status aller Dateien, die es aktualisiert. bevor Sie sie berühren, damit das Gerät nicht in einem halb aufgerüsteten Zustand verhängt wird.

Für eine optimale Nutzererfahrung sollten Sie alle drei bis vier inkrementellen Updates ein vollständiges Update anbieten. So können Nutzer die neueste Version schneller nutzen und eine lange Installationssequenz von inkrementellen Updates vermeiden.

OTA-Pakete für mehrere SKUs erstellen

Android 11 oder höher unterstützt die Verwendung eines einzigen OTA-Pakets für mehrere Geräte mit unterschiedlichen SKUs. Dazu müssen Sie die Zielgeräte, um dynamische Fingerabdrücke zu verwenden und die OTA-Metadaten zu aktualisieren (mit OTA-Tools), um den Gerätenamen und den Fingerabdruck in den Vor- und Nachahmungen anzugeben. Bedingungseinträgen zu erstellen.

SKUs

Das Format einer Artikelnummer ist eine Variation eines kombinierten Builds. Parameterwerte und ist normalerweise eine nicht deklarierte Teilmenge der aktuellen build_fingerprint-Parameter. OEMs können eine beliebige Kombination von vom CDD genehmigten Build-Parametern für eine SKU verwenden und gleichzeitig ein einzelnes Image für diese SKUs verwenden. Die folgende Artikelnummer hat beispielsweise mehrere Varianten:

SKU = <product><device><modifierA><modifierB><modifierC>
  • modifierA ist die Geräteebene (z. B. Pro, Premium oder Plus)
  • modifierB ist die Hardwarevariante (z. B. Radio)
  • modifierC ist die Region, die allgemein (z. B. NA, EMEA oder CHN) oder länder- oder sprachspezifisch (z. B. JPN, ENG oder CHN) sein kann.

Viele OEMs verwenden ein einzelnes Image für mehrere SKUs und leiten den endgültigen Produktnamen und den Gerätefingerabdruck dann zur Laufzeit nach dem Starten des Geräts ab. Dieser Prozess vereinfacht die Plattformentwicklung, da Geräte mit geringfügigen Anpassungen, aber unterschiedlichen Produktnamen gemeinsame Bilder verwenden können (z. B. tardis und tardispro).

Dynamische Fingerabdrücke verwenden

Ein Fingerabdruck ist eine definierte Verkettung von build Parameter wie ro.product.brand, ro.product.name und ro.product.device. Der Fingerabdruck eines Geräts wird aus dem Fingerabdruck der Systempartition abgeleitet und dient als eindeutige Kennung der Images (und Bytes), die auf dem Gerät ausgeführt werden. Wenn Sie einen dynamischen Fingerabdruck erstellen möchten, verwenden Sie dynamische Logik in der build.prop-Datei des Geräts, um den Wert der Bootloader-Variablen beim Starten des Geräts abzurufen. Verwenden Sie dann diese Daten, um einen dynamischen Fingerabdruck für das Gerät zu erstellen.

So können Sie beispielsweise dynamische Fingerabdrücke für tardis- und tardispro-Geräte verwenden: Aktualisieren Sie die folgenden Dateien wie unten gezeigt.

  • Aktualisieren Sie die Datei odm/etc/build_std.prop, sodass sie die folgende Zeile enthält.

    ro.odm.product.device=tardis
    
  • Aktualisieren Sie die Datei odm/etc/build_pro.prop, sodass sie die folgende Zeile enthält.

    ro.odm.product.device=tardispro
    
  • Aktualisieren Sie die Datei odm/etc/build.prop, sodass sie die folgenden Zeilen enthält.

    ro.odm.product.device=tardis
    import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
    

Mit diesen Zeilen werden Gerätename, Fingerabdruck und ro.build.fingerprint-Werte basierend auf dem Wert des ro.boot.product.hardware.sku-Bootloader-Attribut (schreibgeschützt).

Metadaten des OTA-Pakets aktualisieren

Ein OTA-Paket enthält eine Metadatendatei (META-INF/com/android/metadata), die das Paket beschreibt, einschließlich der Vor- und Nachbedingung des OTA-Pakets. Der folgende Code ist beispielsweise die Metadatendatei für ein OTA-Paket. für das Gerät „tardis“ ausgerichtet ist.

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

Die Werte pre-device, pre-build-incremental und pre-build definieren den Status, den ein Gerät haben muss, bevor das OTA-Paket installiert werden kann. Die Werte post-build-incremental und post-build definieren den Zustand, in dem sich ein Gerät nach der Installation des OTA-Pakets befinden soll. Die Werte der Felder pre- und post- werden aus den folgenden entsprechenden Build-Properties abgeleitet.

  • Der Wert pre-device wird vom Build-Attribut ro.product.device abgeleitet.
  • Die Werte pre-build-incremental und post-build-incremental werden abgeleitet aus der Build-Eigenschaft ro.build.version.incremental.
  • Die Werte pre-build und post-build werden abgeleitet aus dem ro.build.fingerprint-Build-Property.

Auf Geräten mit Android 11 oder höher kannst du das Flag --boot_variable_file in OTA-Tools, um einen Pfad zu einer Datei anzugeben, die enthält die Werte der Laufzeitvariablen, die beim Erstellen der dynamischer Fingerabdruck. Die Daten werden dann verwendet, um die OTA-Metadaten zu aktualisieren und den Gerätenamen und den Fingerabdruck in die Bedingungen pre- und post- aufzunehmen (mit dem Pipe-Zeichen | als Trennzeichen). Das --boot_variable_file-Flag hat die folgende Syntax und Beschreibung.

  • Syntax: --boot_variable_file <path>
  • Beschreibung: Gibt den Pfad zu einer Datei an, die die möglichen Werte der ro.boot.*-Attribute enthält. Wird zum Berechnen der möglichen Laufzeit-Fingerabdrücke verwendet wenn einige ro.product.*-Attribute von der Importanweisung überschrieben werden. In der Datei wird eine Eigenschaft pro Zeile erwartet, wobei jede Zeile Folgendes enthält: Format: prop_name=value1,value2.

Wenn das Attribut beispielsweise ro.boot.product.hardware.sku=std,pro ist, OTA-Metadaten für tardis- und tardispro-Geräte finden Sie unten.

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

Informationen zur Unterstützung dieser Funktion auf Geräten mit Android 10 findest du in der Referenz Implementierung. In dieser Änderungsliste werden die import-Anweisungen in der build.prop-Datei bedingt analysiert. So können Attributüberschreibungen erkannt und in den endgültigen OTA-Metadaten berücksichtigt werden.