Android 10 dejó de utilizar el mecanismo de actualización de datos de zona horaria basado en APK (disponible en Android 8.1 y Android 9) y lo reemplazó por un mecanismo de actualización de módulos basado en APEX. AOSP 8.1 a 13 aún incluyen el código de la plataforma necesario para que los OEM habiliten las actualizaciones basadas en APK, por lo que los dispositivos que se actualicen a Android 10 aún pueden recibir actualizaciones de datos de zona horaria proporcionadas por socios a través de APK. Sin embargo, el mecanismo de actualización de APK no se debe usar en un dispositivo de producción que también reciba actualizaciones de módulos, ya que una actualización basada en APK reemplaza una actualización basada en APEX (es decir, un dispositivo que recibió una actualización de APK ignoraría las actualizaciones basadas en APEX).
Actualizaciones de zona horaria (Android 10 y versiones posteriores)
El módulo de datos de zona horaria compatible con Android 10 y versiones posteriores actualiza el horario de verano (DST) y las zonas horarias en dispositivos Android, y estandariza los datos que pueden cambiar con frecuencia por motivos religiosos, políticos y geopolíticos.
Las actualizaciones usan el siguiente proceso:
- La IANA lanza una actualización de la base de datos de zonas horarias en respuesta a uno o más gobiernos que cambian una regla de zona horaria en sus países.
- Google o el socio de Android preparan una actualización del módulo de datos de zona horaria (archivo APEX) que contiene las zonas horarias actualizadas.
- El dispositivo del usuario final descarga la actualización, se reinicia y, luego, aplica los cambios, tras lo cual los datos de zona horaria del dispositivo contienen los nuevos datos de zona horaria de la actualización.
Para obtener detalles sobre los módulos, consulta Componentes modulares del sistema.
Actualizaciones de zona horaria (Android 8.1 a 9)
Nota: La función del mecanismo de actualización de datos de zona horaria basado en APK se quitó por completo de Android 14 en adelante y no se puede encontrar en el código fuente. Los socios deben migrar por completo al módulo de línea principal Time Zone.
En Android 8.1 y Android 9, los OEM pueden usar un mecanismo basado en APK para enviar datos actualizados de reglas de zona horaria a los dispositivos sin requerir una actualización del sistema. Este mecanismo permite a los usuarios recibir actualizaciones oportunas (lo que extiende la vida útil de un dispositivo Android) y a los socios de Android probar las actualizaciones de zona horaria independientemente de las actualizaciones de imagen del sistema.
El equipo de bibliotecas principales de Android proporciona los archivos de datos necesarios para actualizar las reglas de zona horaria en un dispositivo Android estándar. Los OEM pueden optar por usar estos archivos de datos cuando creen actualizaciones de zona horaria para sus dispositivos o pueden crear sus propios archivos de datos si lo prefieren. En todos los casos, los OEM conservan el control sobre la garantía de calidad, las pruebas, los tiempos y el lanzamiento de las actualizaciones de las reglas de zona horaria para sus dispositivos compatibles.
Código fuente y datos de la zona horaria de Android
Todos los dispositivos Android de stock, incluso los que no usan esta función, necesitan datos de reglas de zona horaria y deben incluir un conjunto predeterminado de datos de reglas de zona horaria en la partición /system
. Luego, el código de las siguientes bibliotecas del árbol de fuentes de Android usa estos datos:
- El código administrado de
libcore/
(por ejemplo,java.util.TimeZone
) usa archivostzdata
ytzlookup.xml
. - El código de la biblioteca nativa en
bionic/
(por ejemplo, paramktime
, llamadas al sistema localtime) usa el archivotzdata
. - El código de la biblioteca ICU4J/ICU4C en
external/icu/
usa el archivo.dat
de icu.
Estas bibliotecas hacen un seguimiento de los archivos de superposición que pueden estar presentes en el directorio /data/misc/zoneinfo/current
. Se espera que los archivos de superposición contengan datos mejorados de las reglas de zona horaria, lo que permitirá que los dispositivos se actualicen sin cambiar /system
.
Los componentes del sistema Android que necesitan datos de reglas de zona horaria primero verifican las siguientes ubicaciones:
- El código
libcore/
ybionic/
usa la copia/data
de los archivostzdata
ytzlookup.xml
. - El código de ICU4J/ICU4C usa los archivos en
/data
y recurre a los archivos de/system
para los datos que no están presentes (para formatos, cadenas localizadas, etcétera).
Archivos de distribución
Los archivos .zip
de distribución contienen los archivos de datos necesarios para completar el directorio /data/misc/zoneinfo/current
. Los archivos de distribución también contienen metadatos que permiten que los dispositivos detecten problemas de versiones.
El formato del archivo de distribución depende de la versión de Android, ya que el contenido cambia con la versión de ICU, los requisitos de la plataforma de Android y otros cambios de la versión. Android proporciona archivos de distribución para las versiones de Android compatibles con cada actualización de IANA (además de actualizar los archivos del sistema de la plataforma). Para mantener sus dispositivos actualizados, los OEM pueden usar estos archivos de distribución o crear los suyos propios con el árbol de fuentes de Android (que contiene las secuencias de comandos y otros archivos necesarios para generar archivos de distribución).
Componentes de actualización de zona horaria
Una actualización de las reglas de zona horaria implica la transmisión de archivos de distribución a un dispositivo y la instalación segura de los archivos que contiene. La transferencia y la instalación requieren lo siguiente:
- Funcionalidad del servicio de la plataforma (
timezone.RulesManagerService
), que está inhabilitada de forma predeterminada. Los OEM deben habilitar la funcionalidad a través de la configuración.RulesManagerService
se ejecuta en el proceso del servidor del sistema y organiza las operaciones de actualización de la zona horaria escribiendo en/data/misc/zoneinfo/staged
.RulesManagerService
también puede reemplazar o borrar operaciones ya preparadas. -
TimeZoneUpdater
, una app del sistema que no se puede actualizar (también conocida como la app de Updater). Los OEM deben incluir esta app en la imagen del sistema de los dispositivos que usan la función. TimeZoneData
del OEM, una app del sistema actualizable (también conocida como la app de datos) que transporta archivos de distribución al dispositivo y los pone a disposición de la app de Updater. Los OEM deben incluir esta app en la imagen del sistema de los dispositivos que usan la función.-
tzdatacheck
, un archivo binario de tiempo de arranque necesario para el funcionamiento correcto y seguro de las actualizaciones de zona horaria.
El árbol de origen de Android contiene código fuente genérico para los componentes anteriores, que el OEM puede optar por usar sin modificaciones. Se proporciona código de prueba para permitir que los OEM verifiquen automáticamente que habilitaron la función correctamente.
Instalación de la distro
El proceso de instalación de la distribución incluye los siguientes pasos:
- Se actualiza la app de datos a través de una descarga de la tienda de aplicaciones o una carga lateral. El proceso del servidor del sistema (a través de las clases
timezone.RulesManagerServer/timezone.PackageTracker
) supervisa los cambios en el nombre del paquete de la app de datos configurado y específico del OEM.
Figura 1: Actualizaciones de la app de datos
- El proceso del servidor del sistema activa una verificación de actualización transmitiendo una intención segmentada con un token único de un solo uso a la app de Updater. El servidor del sistema realiza un seguimiento del token más reciente que generó para poder determinar cuándo se completó la verificación más reciente que activó. Se ignoran los demás tokens.
Figura 2: Activa la verificación de actualización.
- Durante la verificación de actualización, la app de Updater realiza las siguientes tareas:
- Consulta el estado actual del dispositivo llamando a RulesManagerService.
Figura 3: Se actualizan las apps de datos y se llama a RulesManagerService.
- Consulta la app de Datos a través de una URL de ContentProvider y especificaciones de columnas bien definidas para obtener información sobre la distribución.
Figura 4: Actualizaciones de la app de datos, obtén información sobre la distribución.
- Consulta el estado actual del dispositivo llamando a RulesManagerService.
- La app de Updater toma la acción adecuada según la información que tiene. Las acciones disponibles incluyen las siguientes:
- Solicita una instalación. Los datos de distribución se leen desde la app de Datos y se pasan a RulesManagerService en el servidor del sistema. RulesManagerService vuelve a confirmar que el formato y el contenido de la distribución son adecuados para el dispositivo y organiza la instalación.
- Solicitar una desinstalación (esto es poco frecuente) Por ejemplo, si se inhabilita o desinstala el APK actualizado en
/data
y el dispositivo vuelve a la versión presente en/system
. - No hacer nada. Se produce cuando se detecta que la distribución de la app de datos no es válida.
Figura 5: Se completó la verificación.
- Reinicia y ejecuta tzdatacheck. La próxima vez que se inicie el dispositivo, el archivo binario tzdatacheck ejecutará cualquier operación preparada. El objeto binario tzdatacheck puede realizar las siguientes tareas:
- Ejecuta la operación por etapas controlando la creación, el reemplazo o el borrado de los archivos
/data/misc/zoneinfo/current
antes de que otros componentes del sistema abran y comiencen a usar los archivos. - Verifica que los archivos de
/data
sean correctos para la versión actual de la plataforma, lo que podría no ser así si el dispositivo acaba de recibir una actualización del sistema y cambió la versión del formato de la distribución. - Asegúrate de que la versión de las reglas de la IANA sea igual o más reciente que la versión en
/system
. Esto protege contra una actualización del sistema que deja un dispositivo con datos de reglas de zona horaria más antiguos que los presentes en la imagen de/system
.
- Ejecuta la operación por etapas controlando la creación, el reemplazo o el borrado de los archivos
Confiabilidad
El proceso de instalación de extremo a extremo es asíncrono y se divide en tres procesos del SO. En cualquier momento durante la instalación, el dispositivo puede quedarse sin energía, quedarse sin espacio en el disco o tener otros problemas, lo que provoca que la verificación de la instalación esté incompleta. En el mejor caso de error, la app de Updater informa al servidor del sistema que no se pudo realizar la actualización. En el peor caso de error, RulesManagerService no recibe ninguna llamada.
Para controlar esto, el código del servidor del sistema realiza un seguimiento de si se completó una verificación de actualización activada y cuál es el último código de versión verificado de la app de datos. Cuando el dispositivo está inactivo y se está cargando, el código del servidor del sistema puede verificar el estado actual. Si detecta una verificación de actualización incompleta o una versión inesperada de la app de datos, activa espontáneamente una verificación de actualización.
Seguridad
Cuando está habilitado, el código de RulesManagerService en el servidor del sistema realiza varias verificaciones para garantizar que el sistema sea seguro de usar.
- Los problemas que indican que la imagen del sistema está mal configurada impiden que se inicie un dispositivo. Algunos ejemplos incluyen una configuración incorrecta de las apps Updater o Data, o que las apps Updater o Data no estén en
/system/priv-app
. - Los problemas que indican que se instaló una app de datos incorrecta no impiden que se inicie un dispositivo, pero sí que se active una verificación de actualización. Algunos ejemplos incluyen la falta de permisos del sistema obligatorios o el hecho de que la app de datos no expone un ContentProvider en el URI esperado.
Los permisos de archivo para los directorios /data/misc/zoneinfo
se aplican con reglas de SELinux. Al igual que con cualquier APK, la app de datos debe estar firmada con la misma clave que se usó para firmar la versión de /system/priv-app
. Se espera que la app de Datos tenga un nombre de paquete y una clave específicos del OEM.
Integrar actualizaciones de zona horaria
Para habilitar la función de actualización de zona horaria, los OEM suelen hacer lo siguiente:
- Crear su propia app de Datos
- Incluye las apps de Updater y Data en la compilación de la imagen del sistema.
- Configura el servidor del sistema para habilitar RulesManagerService.
Preparación
Antes de comenzar, los OEM deben revisar las siguientes consideraciones sobre políticas, garantía de calidad y seguridad:
- Crear una clave de firma específica de la app para su app de Datos
- Crea una estrategia de lanzamiento y control de versiones para las actualizaciones de zonas horarias y, así, comprender qué dispositivos se actualizarán y cómo garantizar que las actualizaciones solo se instalen en los dispositivos que las necesiten. Por ejemplo, es posible que los OEM deseen tener una sola app de Datos para todos sus dispositivos o que elijan tener diferentes apps de Datos para diferentes dispositivos. La decisión afecta la elección del nombre del paquete, posiblemente los códigos de versión que se usan y la estrategia de QA.
- Comprende si quieren usar los datos de zona horaria de Android estándar del AOSP o crear los suyos propios.
Crea una app de datos
El AOSP incluye todo el código fuente y las reglas de compilación necesarios para crear una app de datos en packages/apps/TimeZoneData
, con instrucciones y plantillas de ejemplo para AndroidManifest.xml
y otros archivos ubicados en packages/apps/TimeZoneData/oem_template
. Las plantillas de ejemplo incluyen un destino de compilación para el APK real de la app de Data y destinos adicionales para crear versiones de prueba de la app de Data.
Los OEM pueden personalizar la app de Datos con su propio ícono, nombre, traducciones y otros detalles. Sin embargo, como no se puede iniciar la app de Datos, el ícono solo aparece en la pantalla Configuración > Apps.
La app de Datos está diseñada para compilarse con una compilación de tapas que produce APKs adecuados para agregarse a la imagen del sistema (para la versión inicial) y firmarse y distribuirse a través de una tienda de aplicaciones (para las actualizaciones posteriores). Para obtener detalles sobre el uso de Tapas, consulta Cómo compilar la app de datos con Tapas.
Los OEM deben instalar la app de Datos compilada previamente en la imagen del sistema de un dispositivo en /system/priv-app
. Para incluir APKs compilados previamente (generados por el proceso de compilación de tapas) en la imagen del sistema, los OEM pueden copiar los archivos de ejemplo en packages/apps/TimeZoneData/oem_template/data_app_prebuilt
. Las plantillas de ejemplo también incluyen destinos de compilación para incluir versiones de prueba de la app de Datos en los paquetes de pruebas.
Incluye las apps de Updater y Data en la imagen del sistema
Los OEM deben colocar los APK de las apps de Updater y Data en el directorio /system/priv-app
de la imagen del sistema. Para ello, la compilación de la imagen del sistema debe incluir de forma explícita los destinos precompilados de las apps de Updater y Data.
La app de Updater debe firmarse con la clave de la plataforma y debe incluirse como cualquier otra app del sistema. El destino se define en packages/apps/TimeZoneUpdater
como TimeZoneUpdater
. La inclusión de la app de Datos es específica del OEM y depende del nombre de destino elegido para la compilación previa.
Configura el servidor del sistema
Para habilitar las actualizaciones de zona horaria, los OEM pueden configurar el servidor del sistema anulando las propiedades de configuración definidas en frameworks/base/core/res/res/values/config.xml
.
Propiedad | Descripción | ¿Se requiere anulación? |
---|---|---|
config_enableUpdateableTimeZoneRules |
Se debe establecer en true para habilitar RulesManagerService. |
Sí |
config_timeZoneRulesUpdateTrackingEnabled |
Debe establecerse en true para que el sistema detecte los cambios en la app de Datos. |
Sí |
config_timeZoneRulesDataPackage |
Nombre del paquete de la app de Datos específica del OEM. | Sí |
config_timeZoneRulesUpdaterPackage |
Se configura para la app de Updater predeterminada. Solo se debe cambiar cuando se proporciona una implementación diferente de la app de Updater. | No |
config_timeZoneRulesCheckTimeMillisAllowed |
Es el tiempo permitido entre la activación de una verificación de actualización por parte de RulesManagerService y una respuesta de instalación, desinstalación o no acción. Después de este punto, se puede generar un activador de confiabilidad espontáneo. | No |
config_timeZoneRulesCheckRetryCount |
Es la cantidad de verificaciones de actualización secuenciales sin éxito que se permiten antes de que RulesManagerService deje de generar más. | No |
Las anulaciones de configuración deben estar en la imagen del sistema (no en la del proveedor ni en otras), ya que un dispositivo mal configurado puede negarse a arrancar. Si las anulaciones de configuración estuvieran en la imagen del proveedor, se consideraría un error de configuración actualizar a una imagen del sistema sin una app de Data (o con nombres de paquetes de apps de Data o de Updater diferentes).
Pruebas de xTS
xTS hace referencia a cualquier conjunto de pruebas específico del OEM que sea similar a los conjuntos de pruebas estándares de Android que usan Tradefed (como CTS y VTS). Los OEM que tienen estos conjuntos de pruebas pueden agregar las pruebas de actualización de zona horaria de Android que se proporcionan en las siguientes ubicaciones:
packages/apps/TimeZoneData/testing/xts
incluye el código necesario para las pruebas funcionales automatizadas básicas.packages/apps/TimeZoneData/oem_template/xts
contiene una estructura de directorio de muestra para incluir pruebas en un conjunto de xTS similar a Tradefed. Al igual que con otros directorios de plantillas, se espera que los OEM copien y personalicen según sus necesidades.packages/apps/TimeZoneData/oem_template/data_app_prebuilt
contiene la configuración del tiempo de compilación para incluir los APKs de prueba compilados previamente que requiere la prueba.
Crea actualizaciones de zona horaria
Cuando la IANA lanza un nuevo conjunto de reglas de zona horaria, el equipo de bibliotecas principales de Android genera parches para actualizar las versiones en el AOSP. Los OEM que usan el sistema Android estándar y los archivos de distribución pueden tomar estos cambios, usarlos para crear una nueva versión de su app de Datos y, luego, lanzar la nueva versión para actualizar sus dispositivos en producción.
Dado que las apps de datos contienen archivos de distribución estrechamente vinculados a las versiones de Android, los OEM deben crear una versión nueva de la app de datos para cada versión de Android compatible que deseen actualizar. Por ejemplo, si un OEM quiere proporcionar actualizaciones para dispositivos con Android 8.1, 9 y 10, debe completar el proceso tres veces.
Paso 1: Actualiza los archivos de datos del sistema o de la zona horaria y los archivos de datos externos o de ICU
En este paso, los OEM toman los cambios de Android de stock para system/timezone
y external/icu
de las ramas de desarrollo de versión en el AOSP y aplican esos cambios a su copia del código fuente de Android.
El parche de AOSP system/timezone contiene archivos actualizados en system/timezone/input_data
y system/timezone/output_data
. Los OEM que necesiten realizar correcciones locales adicionales pueden modificar los archivos de entrada y, luego, usar los archivos en system/timezone/input_data
y external/icu
para generar archivos en output_data
.
El archivo más importante es system/timezone/output_data/distro/distro.zip
, que se incluye automáticamente cuando se compila el APK de la app de Datos.
Paso 2: Actualiza el código de versión de la app de datos
En este paso, los OEM actualizan el código de versión de la app de Datos. La compilación selecciona automáticamente distro.zip
, pero la nueva versión de la app de Datos debe tener un código de versión nuevo para que se reconozca como nueva y se use para reemplazar una app de Datos precargada o una app de Datos instalada en un dispositivo por una actualización anterior.
Cuando compiles la app de datos con los archivos copiados de package/apps/TimeZoneData/oem_template/data_app
, podrás encontrar el código de versión o el nombre de la versión aplicados al APK en Android.mk
:
TIME_ZONE_DATA_APP_VERSION_CODE := TIME_ZONE_DATA_APP_VERSION_NAME :=
Se pueden encontrar entradas similares en testing/Android.mk
(sin embargo, los códigos de versión de prueba deben ser superiores a la versión de la imagen del sistema). Para obtener más detalles, consulta el esquema de estrategia de códigos de versión de ejemplo. Si se usa el esquema de ejemplo o uno similar, no es necesario actualizar los códigos de versión de prueba, ya que se garantiza que serán más altos que los códigos de versión reales.
Paso 3: Vuelve a compilar, firma, prueba y lanza la app
En este paso, los OEM vuelven a compilar el APK con tapas, firman el APK generado y, luego, lo prueban y lanzan:
- En el caso de los dispositivos no lanzados (o cuando se prepara una actualización del sistema para un dispositivo lanzado), envía los APKs nuevos en el directorio precompilado de la app de Data para garantizar que la imagen del sistema y las pruebas de xTS tengan los APKs más recientes. Los OEM deben probar que el archivo nuevo funcione correctamente (es decir, que supere las pruebas de CTS y cualquier prueba automatizada y manual específica del OEM).
- En el caso de los dispositivos lanzados que ya no reciben actualizaciones del sistema, es posible que el APK firmado solo se lance a través de una tienda de aplicaciones.
Los OEM son responsables de la garantía de calidad y de probar la app de Datos actualizada en sus dispositivos antes del lanzamiento.
Estrategia del código de versión de la app de datos
La app de Datos debe tener una estrategia de versiones adecuada para garantizar que los dispositivos reciban los APKs correctos. Por ejemplo, si se recibe una actualización del sistema que contiene un APK más antiguo que uno descargado de la tienda de aplicaciones, se debe conservar la versión de la tienda de aplicaciones.
El código de versión del APK debe incluir la siguiente información:
- Versión del formato de la distribución (principal y secundaria)
- Un número de versión (opaco) que se incrementa
Actualmente, el nivel de API de la plataforma está muy correlacionado con la versión del formato de la distribución, ya que cada nivel de API suele estar asociado con una nueva versión de ICU (lo que hace que los archivos de distribución sean incompatibles). En el futuro, es posible que Android cambie esto para que un archivo de distribución pueda funcionar en varias versiones de la plataforma de Android (y el nivel de API no se use en el esquema de código de versión de la app de datos).
Ejemplo de estrategia de código de versión
Este esquema de numeración de versiones de ejemplo garantiza que las versiones de formato de distribución más altas reemplacen a las más bajas.
AndroidManifest.xml
usa android:minSdkVersion
para garantizar que los dispositivos antiguos no reciban versiones con una versión de formato de distribución superior a la que pueden controlar.

Figura 6: Ejemplo de estrategia de códigos de versión.
Ejemplo | Valor | Propósito |
---|---|---|
Y | Reservado | Permite futuros esquemas alternativos o APKs de prueba. Inicialmente, es 0 (de forma implícita). Dado que el tipo subyacente es un tipo int de 32 bits firmado, este esquema admite hasta dos revisiones futuras del esquema de numeración. |
01 | Versión principal del formato | Realiza un seguimiento de la versión principal del formato con 3 dígitos decimales. El formato de distribución admite 3 dígitos decimales, pero aquí solo se usan 2. Es poco probable que alcance el 100, dado el incremento importante esperado por nivel de API. La versión principal 1 equivale al nivel de API 27. |
1 | Versión secundaria del formato | Realiza un seguimiento de la versión de formato secundaria de 3 dígitos decimales. El formato de distribución admite 3 dígitos decimales, pero aquí solo se usa 1. Es poco probable que llegue a 10. |
X | Reservado | Es 0 para las versiones de producción (y puede ser diferente para los APKs de prueba). |
ZZZZZ | Número de versión opaco | Es un número decimal asignado a pedido. Incluye espacios para permitir que se realicen actualizaciones de anuncios intercalados si es necesario. |
El esquema podría empaquetarse mejor si se usara el sistema binario en lugar del decimal, pero este esquema tiene la ventaja de ser legible. Si se agota el rango de números completo, es posible que cambie el nombre del paquete de la app de Datos.
El nombre de la versión es una representación legible por humanos de los detalles, por ejemplo, major=001,minor=001,iana=2017a, revision=1,respin=2
.
En la siguiente tabla, se muestran algunos ejemplos.
# | Código de versión | minSdkVersion | {Versión principal del formato},{Versión secundaria del formato},{Versión de las reglas de IANA},{Revisión} |
---|---|---|---|
1 | 11000010 | O-MR1 | major=001,minor=001,iana=2017a,revision=1 |
2 | 21000010 | P | major=002,minor=001,iana=2017a,revision=1 |
3 | 11000020 | O-MR1 | major=001,minor=001,iana=2017a,revision=2 |
4 | 11000030 | O-MR1 | major=001,minor=001,iana=2017b,revision=1 |
5 | 21000020 | P | major=002,minor=001,iana=2017b,revision=1 |
6 | 11000040 | O-MR1 | major=001,minor=001,iana=2018a,revision=1 |
7 | 21000030 | P | major=002,minor=001,iana=2018a,revision=1 |
8 | 1123456789 | - | - |
9 | 11000021 | O-MR1 | major=001,minor=001,iana=2017a,revision=2,respin=2 |
- En los ejemplos 1 y 2, se muestran dos versiones de APK para la misma versión de IANA 2017a con diferentes versiones de formato principal. El 2 es numéricamente más alto que el 1, lo que se necesita para garantizar que los dispositivos más nuevos reciban las versiones de formato más altas. El valor de minSdkVersion garantiza que la versión P no se proporcione a los dispositivos con la versión O.
- El ejemplo 3 es una revisión o corrección del ejemplo 1 y es numéricamente superior a 1.
- En los ejemplos 4 y 5, se muestran las versiones de 2017b para O-MR1 y P. Al ser numéricamente más altas, reemplazan las versiones anteriores de IANA o las revisiones de Android de sus respectivos predecesores.
- En los ejemplos 6 y 7, se muestran las versiones de 2018a para O-MR1 y P.
- En el ejemplo 8, se muestra el uso de Y para reemplazar por completo el esquema Y=0.
- En el ejemplo 9, se muestra el uso del espacio que queda entre 3 y 4 para volver a generar el APK.
Como cada dispositivo se envía con un APK predeterminado y con la versión adecuada en la imagen del sistema, no hay riesgo de que se instale una versión de O-MR1 en un dispositivo P, ya que tiene un número de versión inferior al de una versión de imagen del sistema P. Un dispositivo con una versión O-MR1 instalada en /data
que luego recibe una actualización del sistema a P usa la versión /system
en lugar de la versión O-MR1 en /data
porque la versión P siempre es superior a cualquier app diseñada para O-MR1.
Compila la app de datos con tapas
Los OEM son responsables de administrar la mayoría de los aspectos de la app de datos de zona horaria y de configurar correctamente la imagen del sistema. La app de Datos se diseñó para compilarse con una compilación de tapas que produce APKs adecuados para agregarse a la imagen del sistema (para el lanzamiento inicial) y firmarse y distribuirse a través de una tienda de aplicaciones (para las actualizaciones posteriores).
Tapas es una versión reducida del sistema de compilación de Android que usa un árbol de origen reducido para producir versiones distribuibles de apps. Los OEM que conocen el sistema de compilación normal de Android deberían reconocer los archivos de compilación de la compilación normal de la plataforma Android.
Crea el manifiesto
Por lo general, se logra un árbol de fuente reducido con un archivo de manifiesto personalizado que solo hace referencia a los proyectos de Git que necesita el sistema de compilación y para compilar la app. Después de seguir las instrucciones en Cómo crear una app de datos, los OEM deben tener al menos dos proyectos de Git específicos del OEM creados con los archivos de plantilla en packages/apps/TimeZoneData/oem_template
:
- Un proyecto de Git contiene archivos de la app, como el manifiesto y los archivos de compilación necesarios para crear el archivo APK de la app (por ejemplo,
vendor/oem/apps/TimeZoneData
). Este proyecto también contiene reglas de compilación para los APKs de prueba que pueden usar las pruebas de xTS. - Un proyecto de Git contiene los APKs firmados que produce la compilación de la app para su inclusión en la compilación de la imagen del sistema y las pruebas de xTS.
La compilación de la app aprovecha varios otros proyectos de Git que se comparten con la compilación de la plataforma o contienen bibliotecas de código independientes del OEM.
El siguiente fragmento de manifiesto contiene el conjunto mínimo de proyectos de Git necesarios para admitir una compilación de O-MR1 de la app de datos de zona horaria. Los OEM deben agregar sus proyectos de Git específicos del OEM (que suelen incluir un proyecto que contiene el certificado de firma) a este manifiesto y pueden configurar diferentes ramas según corresponda.
<!-- Tapas Build --> <project path="build" name="platform/build"> <copyfile src="core/root.mk" dest="Makefile" /> </project> <project path="prebuilts/build-tools" name="platform/prebuilts/build-tools" clone-depth="1" /> <project path="prebuilts/go/linux-x86" name="platform/prebuilts/go/linux-x86" clone-depth="1" /> <project path="build/blueprint" name="platform/build/blueprint" /> <project path="build/kati" name="platform/build/kati" /> <project path="build/soong" name="platform/build/soong"> <linkfile src="root.bp" dest="Android.bp" /> <linkfile src="bootstrap.bash" dest="bootstrap.bash" /> </project> <!-- SDK for system / public API stubs --> <project path="prebuilts/sdk" name="platform/prebuilts/sdk" clone-depth="1" /> <!-- App source --> <project path="system/timezone" name="platform/system/timezone" /> <project path="packages/apps/TimeZoneData" name="platform/packages/apps/TimeZoneData" /> <!-- Enable repohooks --> <project path="tools/repohooks" name="platform/tools/repohooks" revision="main" clone_depth="1" /> <repo-hooks in-project="platform/tools/repohooks" enabled-list="pre-upload" />
Ejecuta la compilación de Tapas
Después de establecer el árbol de origen, invoca la compilación de tapas con los siguientes comandos:
source build/envsetup.sh
tapas
make -j30 showcommands dist TARGET_BUILD_APPS='TimeZoneData TimeZoneData_test1 TimeZoneData_test2' TARGET_BUILD_VARIANT=userdebug
Una compilación exitosa genera archivos en el directorio out/dist
para las pruebas. Estos archivos se pueden colocar en el directorio de compilaciones previas para incluirlos en la imagen del sistema o distribuirlos a través de una tienda de aplicaciones para dispositivos compatibles.