Vous pouvez utiliser l'outil ota_from_target_files
fourni dans build/make/tools/releasetools
pour créer des packages OTA complets et incrémentaux pour les appareils qui utilisent des mises à jour du système A/B ou des mises à jour du système autres que A/B. L'outil utilise le fichier target-files.zip
produit par le système de compilation Android comme entrée.
Pour les appareils équipés d'Android 11 ou version ultérieure, vous pouvez créer un seul package OTA pour plusieurs appareils avec différents codes SKU. Pour ce faire, vous devez configurer les appareils cibles pour qu'ils utilisent des empreintes digitales dynamiques et mettre à jour les métadonnées OTA afin d'inclure le nom et l'empreinte digitale de l'appareil dans les entrées de pré- et postconditions.
Les packages OTA basés sur les fichiers sont obsolètes sous Android 8.0 pour les appareils non A/B, qui doivent
Utilisez plutôt des packages OTA basés sur des blocs. À
générer des packages OTA par bloc ou des appareils équipés d'Android 7.x ou version antérieure, transmettre
l'option --block
au paramètre ota_from_target_files
.
Compiler les mises à jour complètes
Une mise à jour complète est un package OTA qui contient l'intégralité de l'état final
(partitions système, de démarrage et de récupération). Tant que l'appareil est capable
de réception et d'application du package, celui-ci peut installer
quel que soit l'état actuel de l'appareil. Par exemple :
utilisent les outils de publication pour créer l'archive target-files.zip
pour le
tardis
appareil.
. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output
make dist
crée un package OTA complet (dans $OUT
). Le fichier .zip
obtenu
contient tout ce qui est nécessaire pour créer des packages OTA pour l'appareil tardis
.
Vous pouvez également compiler ota_from_target_files
en tant que binaire Python et l'appeler pour créer des packages complets ou incrémentaux.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
Le chemin d'accès ota_from_target_files
est configuré dans $PATH
, et les fichiers Python
se trouve dans le répertoire out/
.
ota_update.zip
est maintenant prêt à être envoyé aux appareils de test (tout est signé avec la clé de test). Pour les appareils des utilisateurs, générez et utilisez vos propres clés privées
détaillé dans Signer les builds en vue de la publication.
Créer des mises à jour incrémentielles
Une mise à jour incrémentielle est un package OTA qui contient des correctifs binaires pour les données déjà présentes sur l'appareil. Les packages avec mises à jour incrémentielles sont généralement plus petits car ils n'ont pas besoin d'inclure de fichiers non modifiés. De plus, comme les fichiers modifiés sont souvent très similaires à leurs versions précédentes, le package ne doit inclure un encodage des différences entre les deux fichiers.
Vous ne pouvez installer un package de mise à jour incrémentielle que sur les appareils dotés du
la compilation source utilisée
dans la construction du package. Pour créer une mise à jour incrémentielle, vous avez besoin du fichier target_files.zip
de la version précédente (celle à partir de laquelle vous souhaitez mettre à jour) ainsi que du fichier target_files.zip
de la nouvelle version. Par exemple, les commandes suivantes utilisent des outils de publication pour créer une mise à jour incrémentielle pour l'appareil tardis
.
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip
Cette version est très similaire à la version précédente, et le package de mise à jour incrémentielle (incremental_ota_update.zip
) est beaucoup plus petit que la mise à jour complète correspondante (environ 1 Mo au lieu de 60 Mo).
Ne distribuez un package incrémentiel qu'aux appareils qui exécutent exactement le même build précédent utilisé comme point de départ du package incrémentiel. Vous devez flasher
les images dans PREVIOUS-tardis-target_files.zip
ou PREVIOUS-tardis-img.zip
(tous deux créés avec make dist
, à flasher avec fastboot update
), au lieu de
ceux du répertoire PRODUCT_OUT
(créés avec make
, qui seront
flashé par fastboot flashall
). Tentative d'installation du package incrémentiel
sur un appareil avec un autre build
entraîne une erreur d'installation. Lorsque
l'installation échoue, l'appareil reste dans le même état de fonctionnement (en exécutant
système) ; le package vérifie l'état précédent de tous les fichiers qu'il met à jour
avant de les toucher, afin que l’appareil ne soit pas coincé dans un état à moitié mis à niveau.
Pour une expérience utilisateur optimale, proposez une mise à jour complète toutes les trois à quatre mises à jour incrémentielles. Cela permet aux utilisateurs de passer à la dernière version et d'éviter une longue séquence d'installation de mises à jour incrémentielles.
Créer des packages OTA pour plusieurs SKU
Android 11 ou version ultérieure permet d'utiliser un seul package OTA pour plusieurs appareils avec différents SKU. Pour ce faire, vous devez configurer les appareils cibles pour qu'ils utilisent des empreintes dynamiques et mettre à jour les métadonnées OTA (à l'aide d'outils OTA) afin d'inclure le nom et l'empreinte de l'appareil dans les entrées de pré- et post-conditions.
À propos des SKU
Le format d'un code SKU est une variante des valeurs combinées du paramètre de compilation et est généralement un sous-ensemble non déclaré des paramètres build_fingerprint
actuels.
Les OEM peuvent utiliser n'importe quelle combinaison de paramètres de compilation approuvés par le CDD pour un SKU, tout en
également en utilisant une seule image pour ces SKU. Par exemple, le SKU suivant a
plusieurs variantes:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
correspond au niveau de l'appareil (par exemple, Pro, Premium ou Plus).modifierB
est la variante matérielle (par exemple, radio)modifierC
correspond à la région, qui peut être une valeur (par exemple, NA, EMEA ou CHN) ou selon un pays ou une langue spécifique (par exemple, JPN, AN ou CHN)
De nombreux OEM utilisent une seule image pour plusieurs codes SKU, puis dérivent le nom du produit final et l'empreinte de l'appareil au moment de l'exécution après le démarrage de l'appareil. Ce processus
simplifie le processus de développement de la plate-forme en permettant aux appareils
personnalisations, mais des noms de produits différents pour partager des images communes (comme
tardis
et tardispro
).
Utiliser des empreintes dynamiques
Une empreinte est une concaténation définie de build
paramètres tels que
ro.product.brand
, ro.product.name
et ro.product.device
. L'empreinte d'un appareil est dérivée de l'empreinte de la partition système et sert d'identifiant unique des images (et des octets) exécutées sur l'appareil. Pour créer un
dynamique, utilisez la logique dynamique dans le fichier build.prop
de l'appareil pour
obtenir la valeur des variables du bootloader au moment
du démarrage de l'appareil, puis utiliser ces données pour
créer une empreinte dynamique pour cet appareil.
Par exemple, pour utiliser des empreintes dynamiques sur les appareils tardis
et tardispro
,
modifiez les fichiers suivants comme indiqué ci-dessous.
Mettez à jour le fichier
odm/etc/build_std.prop
pour qu'il contienne la ligne suivante.ro.odm.product.device=tardis
Mettez à jour le fichier
odm/etc/build_pro.prop
pour qu'il contienne la ligne suivante.ro.odm.product.device=tardispro
Modifiez le fichier
odm/etc/build.prop
pour qu'il contienne les lignes suivantes.ro.odm.product.device=tardis import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
Ces lignes définissent de manière dynamique le nom, l'empreinte et les valeurs ro.build.fingerprint
de l'appareil en fonction de la valeur de la propriété du bootloader ro.boot.product.hardware.sku
(qui est en lecture seule).
Mettre à jour les métadonnées des packages OTA
Un package OTA contient un fichier de métadonnées (META-INF/com/android/metadata
) qui
décrit le package, y compris la condition préalable et l'état post-condition de l'OTA
d'un package. Par exemple, le code suivant est le fichier de métadonnées d'un package OTA.
ciblant l'appareil 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
Les valeurs pre-device
, pre-build-incremental
et pre-build
définissent
état que doit avoir un appareil pour que le package OTA puisse être installé. La
Les valeurs post-build-incremental
et post-build
définissent l'état d'un appareil.
après l'installation du package OTA. Les valeurs de pre-
et
Les champs post-
sont dérivés des propriétés de compilation correspondantes suivantes.
- La valeur
pre-device
est dérivée de la propriété de compilationro.product.device
. - Les valeurs
pre-build-incremental
etpost-build-incremental
sont dérivées à partir de la propriété de compilationro.build.version.incremental
. - Les valeurs
pre-build
etpost-build
sont dérivées de la propriété de compilationro.build.fingerprint
.
Sur les appareils équipés d'Android 11 ou version ultérieure, vous pouvez utiliser l'indicateur --boot_variable_file
dans les outils OTA pour spécifier un chemin d'accès à un fichier contenant les valeurs des variables d'exécution utilisées pour créer l'empreinte dynamique de l'appareil. Les données sont ensuite utilisées pour mettre à jour les métadonnées OTA afin d'inclure le nom et l'empreinte de l'appareil dans les conditions pre-
et post-
(à l'aide du caractère | comme séparateur). L'indicateur --boot_variable_file
a la syntaxe et la description suivantes.
- Syntaxe :
--boot_variable_file <path>
- Description : spécifie un chemin d'accès à un fichier contenant les valeurs possibles des propriétés
ro.boot.*
. Permet de calculer les empreintes d'exécution possibles Lorsque certaines propriétésro.product.*
sont remplacées par l'instruction d'importation. Le fichier attend une propriété par ligne, chaque ligne contenant les éléments suivants : format:prop_name=value1,value2
.
Par exemple, lorsque la propriété est ro.boot.product.hardware.sku=std,pro
,
Les métadonnées OTA pour les appareils tardis
et tardispro
sont présentées ci-dessous.
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
Pour prendre en charge cette fonctionnalité sur les appareils équipés d'Android 10, consultez la documentation de référence
de l'implémentation.
Cette liste de modifications analyse de manière conditionnelle les instructions import
dans le build.prop
.
, ce qui permet de reconnaître et de refléter les remplacements de propriété
les métadonnées OTA finales.