Puedes usar la ota_from_target_files
que se proporciona en build/make/tools/releasetools
para crear modelos incrementales y completos
Paquetes inalámbricos para dispositivos que usan actualizaciones del sistema A/B o
actualizaciones del sistema que no son A/B. La herramienta toma el
Archivo target-files.zip
producido por el sistema de compilación de Android como entrada.
Para dispositivos con Android 11 o versiones posteriores, puedes compilar un paquete inalámbrico para varios dispositivos con diferentes SKU. Para ello, se requiere Configurar los dispositivos de destino para que usen huellas digitales dinámicas y actualizar los metadatos de OTA para incluir el dispositivo y huella digital en las entradas previa y posterior a la condición.
Android 8.0 dio de baja los paquetes inalámbricos basados en archivos para dispositivos que no sean A/B, que deben
en su lugar, usa paquetes inalámbricos basados en bloques. Para
generar paquetes inalámbricos basados en bloques o dispositivos con Android 7.x o versiones anteriores, pasar
la opción --block
al parámetro ota_from_target_files
.
Crea actualizaciones completas
Una actualización completa es un paquete inalámbrico que contiene todo el estado final del
dispositivo (particiones de sistema, inicio y recuperación). Siempre y cuando el dispositivo sea capaz
de recibir y aplicar el paquete, este puede instalar la compilación
independientemente del estado actual del dispositivo. Por ejemplo, los siguientes
usa herramientas de lanzamiento para compilar el archivo target-files.zip
del
tardis
dispositivo.
. build/envsetup.sh && lunch tardis-eng
mkdir dist_output
make dist DIST_DIR=dist_output
make dist
compila un paquete inalámbrico completo (en $OUT
). El archivo .zip
resultante
contiene todo lo necesario para construir paquetes inalámbricos para el dispositivo tardis
.
También puedes compilar el ota_from_target_files
como un objeto binario de Python y llamarlo para
para compilar paquetes completos o incrementales.
ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip
La ruta de acceso ota_from_target_files
se configura en $PATH
, y la imagen resultante de Python
se encuentra en el directorio out/
.
Ya puedes enviar ota_update.zip
a dispositivos de prueba (todo está firmado)
con la clave de prueba). Para los dispositivos de los usuarios, genera y usa tus propias claves privadas como
se detalla en Cómo firmar compilaciones para el lanzamiento.
Cómo compilar actualizaciones incrementales
Una actualización incremental es un paquete inalámbrico que contiene parches binarios para los datos ya está en el dispositivo. Los paquetes con actualizaciones incrementales suelen ser más pequeños ya que no necesitan incluir archivos sin modificar. Además, como los archivos modificados y suelen ser muy similares a sus versiones anteriores, el paquete solo debe incluir una codificación de las diferencias entre los dos archivos.
Puedes instalar un paquete de actualización incremental solo en los dispositivos que tengan la
Es la compilación de origen que se usa para construir el paquete. Para crear una actualización incremental,
necesitas el archivo target_files.zip
de la compilación anterior (la que deseas
para actualizar from), así como el archivo target_files.zip
de la nueva compilación. Para
ejemplo, los siguientes comandos usan herramientas de lanzamiento para compilar una actualización incremental
para el dispositivo tardis
.
ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip
Esta compilación es muy similar a la anterior, y la actualización incremental
paquete (incremental_ota_update.zip
) es mucho más pequeño que el valor correspondiente
actualización completa (aproximadamente 1 MB en lugar de 60 MB).
Distribuir un paquete incremental solo a los dispositivos que se ejecutan exactamente igual
la compilación anterior utilizada como punto de partida del paquete incremental. Debes activar la memoria flash
las imágenes en PREVIOUS-tardis-target_files.zip
o PREVIOUS-tardis-img.zip
(ambas compiladas con make dist
, para escribirse en la memoria flash con fastboot update
), en lugar de
los que están en el directorio PRODUCT_OUT
(compilados con make
, que serán
parpadearon con fastboot flashall
). Intenta instalar el paquete incremental
en un dispositivo con otra compilación generará un error de instalación. Cuando
falla la instalación, el dispositivo permanece en el mismo estado (con la versión anterior
sistema); el paquete verifica el estado anterior de todos los archivos que actualiza
antes de tocarlos, para que el dispositivo no quede varado en un estado semiactualizado.
Para brindar la mejor experiencia del usuario, ofrece una actualización completa por cada 3 o 4 actualizaciones. Esto ayuda a los usuarios a ponerse al día con la versión más reciente y evitar una demora una secuencia de instalación de actualizaciones incrementales.
Crea paquetes inalámbricos para varios SKU
Android 11 y las versiones posteriores admiten el uso de una única OTA para varios dispositivos con diferentes SKU. Para ello, es necesario configurar que los dispositivos de destino usen huellas digitales dinámicas y actualicen los metadatos de OTA (mediante herramientas inalámbricas) para incluir el nombre del dispositivo y la huella digital en la parte previa y posterior condiciones.
Acerca de los SKU
El formato de un SKU es una variación de la compilación combinada
parámetros y
Por lo general, es un subconjunto no declarado de los parámetros actuales build_fingerprint
.
Los OEM pueden usar cualquier combinación de parámetros de compilación aprobados por CDD para un SKU, mientras que
una sola imagen para esos SKU. Por ejemplo, el siguiente SKU tiene
múltiples variaciones:
SKU = <product><device><modifierA><modifierB><modifierC>
modifierA
es el nivel del dispositivo (como Pro, Premium o Plus)modifierB
es la variación de hardware (como radio)modifierC
es la región, que puede ser general. (como NA, EMEA o CHN) o específica de un país o idioma (como JPN, ENG o CHN)
Muchos OEM usan una sola imagen para varios SKU y, luego, derivan el producto final.
y la huella digital del dispositivo en el tiempo de ejecución, luego de que se inicie el dispositivo. Este proceso
simplifica el proceso de desarrollo de la plataforma, lo que permite que los dispositivos
personalizaciones, pero diferentes nombres de productos para compartir imágenes comunes (como
tardis
y tardispro
).
Usa huellas digitales dinámicas
Una huella digital es una concatenación definida de compilación
como los parámetros
ro.product.brand
, ro.product.name
y ro.product.device
. La huella dactilar
de un dispositivo se deriva de la huella digital de la partición del sistema y se usa como
identificador único de las imágenes (y bytes) que se ejecutan en el dispositivo. Para crear un
huella digital dinámica, usa la lógica dinámica en el archivo build.prop
del dispositivo para lo siguiente:
obtener el valor de las variables del bootloader en el momento de inicio del dispositivo y, luego, usar esos datos para
crea una huella digital dinámica para ese dispositivo.
Por ejemplo, para usar huellas digitales dinámicas en dispositivos tardis
y tardispro
, haz lo siguiente:
actualiza los siguientes archivos como se muestra a continuación.
Actualiza el archivo
odm/etc/build_std.prop
para que contenga la siguiente línea.ro.odm.product.device=tardis
Actualiza el archivo
odm/etc/build_pro.prop
para que contenga la siguiente línea.ro.odm.product.device=tardispro
Actualiza el archivo
odm/etc/build.prop
para que contenga las siguientes líneas.ro.odm.product.device=tardis import /odm/etc/build_${ro.boot.product.hardware.sku}.prop
Estas líneas establecen dinámicamente el nombre del dispositivo, la huella digital y
Valores ro.build.fingerprint
basados en el valor de
Propiedad del bootloader ro.boot.product.hardware.sku
(que es de solo lectura).
Actualiza los metadatos de paquetes de OTA
Un paquete inalámbrico contiene un archivo de metadatos (META-INF/com/android/metadata
) que
describe el paquete, incluidas las condiciones previas y posteriores de la actualización
. Por ejemplo, el siguiente código es el archivo de metadatos de un paquete inalámbrico
orientadas al dispositivo 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
Los valores pre-device
, pre-build-incremental
y pre-build
definen la
el estado que debe tener un dispositivo antes de que se pueda instalar el paquete inalámbrico. El
Los valores de post-build-incremental
y post-build
definen el estado de un dispositivo.
que se espera que tengas después de la instalación del paquete inalámbrico. Los valores de pre-
y
Los campos post-
derivan de las siguientes propiedades de compilación correspondientes.
- El valor
pre-device
deriva de la propiedad de compilaciónro.product.device
. - Los valores
pre-build-incremental
ypost-build-incremental
se derivan de la propiedad de compilaciónro.build.version.incremental
. - Los valores
pre-build
ypost-build
derivan de la Propiedad de compilaciónro.build.fingerprint
.
En dispositivos que ejecutan Android 11 o versiones posteriores, puedes usar
la marca --boot_variable_file
en las herramientas inalámbricas para especificar una ruta de acceso a un archivo
contiene los valores de las variables de entorno de ejecución que se usan para crear la configuración
huella digital dinámica. Luego, los datos se usan para actualizar los metadatos de OTA para incluir
el nombre del dispositivo y la huella digital en las condiciones pre-
y post-
(mediante el
carácter de barra vertical | como delimitador). La marca --boot_variable_file
tiene la
siguiente sintaxis y descripción.
- Sintaxis:
--boot_variable_file <path>
- Descripción: especifica una ruta de acceso a un archivo que contiene los valores posibles de
ro.boot.*
de propiedades. Se usa para calcular las posibles huellas digitales del tiempo de ejecución Cuando la sentencia de importación anula algunas propiedades dero.product.*
. El archivo espera una propiedad por línea en la que cada línea tenga lo siguiente: formato:prop_name=value1,value2
.
Por ejemplo, cuando la propiedad es ro.boot.product.hardware.sku=std,pro
, el valor
A continuación, se muestran los metadatos de OTA para dispositivos tardis
y tardispro
.
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
Para admitir esta función en dispositivos que ejecutan Android 10, consulta la referencia
implementación.
Esta lista de cambios analiza condicionalmente las sentencias import
en build.prop
.
, que permite reconocer anulaciones de propiedades y reflejarlas en la
metadatos finales de OTA.