Ayer, se lanzó la próxima actualización del sistema operativo para dispositivos móviles de Google. Una de las principales innovaciones de Android 10 fue el "Proyecto Mainline". Trataré de averiguar qué es, por qué y cómo funciona.
Durante muchos años, Google ha estado tratando de resolver el problema de las actualizaciones de seguridad en Android. Actualmente, Android está instalado en varios miles de millones de dispositivos, pero la mayoría de los fabricantes son muy reacios a admitir dispositivos después del lanzamiento. Esto lleva al hecho de que hay muchos dispositivos en funcionamiento en los que se instala una versión con vulnerabilidades conocidas.
El primer gran paso para simplificar la actualización de Android fue "Project Treble", que "dividió" a Android en dos partes: dependiente del hardware e independiente. Lo que facilitó el lanzamiento de actualizaciones a nuevas versiones de Android. El siguiente gran paso fue Project Mainline. Le permite actualizar componentes individuales del sistema operativo sin actualizar todo el sistema, de forma similar a la actualización de aplicaciones.
¿Por qué se necesita esto?
En la arquitectura de Android, el sistema operativo (a menudo denominado firmware) está muy separado de los datos y las aplicaciones del usuario. Se encuentra en una sección separada de la memoria flash, es de solo lectura y en las últimas versiones de Android está firmado digitalmente para el control de integridad. Para las aplicaciones de Android que forman parte del sistema operativo, es posible una actualización con la colocación de nuevas versiones de aplicaciones en la sección de memoria del usuario. La actualización de otras partes del sistema operativo (servicios, bibliotecas, etc.), por ejemplo, utilizando el administrador de paquetes, como en las distribuciones de Linux, era imposible. Para tales correcciones, el fabricante se vio obligado a lanzar una actualización de todo el sistema. Al mismo tiempo, cuando se utilizan los servicios móviles de Google (la gran mayoría de los dispositivos los utilizan), cada actualización requiere la certificación de Google. Y "Project Mainline" resuelve este problema, ahora los componentes del sistema pueden actualizarse individualmente, de forma similar a las aplicaciones de Android. Además de las actualizaciones de seguridad, también simplifica la actualización de la configuración y los datos del sistema, como las zonas horarias (tzdata).
Como funciona
El núcleo de Project Mainline es el nuevo contenedor para aplicaciones del sistema APEX (abreviatura de Android Pony EXpress).
En Android 10, Google identificó 13 paquetes APEX en el sistema que se pueden actualizar de forma independiente:
- Seguridad: códecs de medios, componentes del marco de medios, resolución de DNS, cifrado
- Privacidad: documentos UI, controlador de permisos, ExtServices
- Consistencia: datos de la zona horaria, ANGLE (suscripción de los desarrolladores), metadatos del módulo, componentes de red, inicio de sesión en el portal cautivo, configuración de permisos de red
Los paquetes APEX se pueden instalar de manera similar a los APK utilizando el "instalador de paquetes", adb o Google Play.
Apex
El archivo APEX es similar al utilizado para las aplicaciones APK de Andoird.
APEX es un archivo zip que contiene 4 archivos principales:
- apex_manifest.json: contiene el nombre del paquete y su versión;
- AndroidManifest.xml: metadatos del paquete (similar a APK);
- apex_payload.img: imagen del sistema de archivos ext4;
- apex_pubkey: clave pública para verificar la firma de la imagen.
El servicio del sistema APEX manager (apexd) funciona con paquetes APEX.
Gerente de Apex
- El instalador del paquete, habiendo determinado que es un paquete APEX, lo pasa al administrador APEX.
- El administrador APEX verifica el paquete y su versión.
- Si pasan los controles, lo desempaqueta en la sección de usuario de la memoria, actualiza el registro en su base de datos y reinicia los dispositivos.
- Cuando se inicia APEX, el administrador verifica todos los paquetes de la base de datos, crea un dispositivo de bucle para la imagen ext4 y lo monta a lo largo de la ruta / apex / name @ ver.
Dentro de una imagen de un paquete APEX, puede haber:
- archivos ejecutables
- bibliotecas compartidas (.so)
- Bibliotecas JAR,
- archivos de datos
- archivos de configuración
Paquete APEX exclusivo
El paquete APEX se firma dos veces, con dos claves diferentes. La imagen ext4 se firma con una clave (se utiliza dm-verity, como en el arranque verificado de Android), el paquete APEX (archivo zip) se firma con la segunda clave, similar al paquete APK.
Kernel de Linux
APEX utiliza varios mecanismos del kernel de Linux, como un dispositivo de bucle, DM-verity.
APEX es compatible con la versión de kernel 4.4 y superior. Para dispositivos en versiones anteriores del kernel, solo se admite el trabajo en modo "plano", que no admite la actualización.
Referencias
android.googlesource.com/platform/system/apex/+/refs/heads/master/docs/README.mdandroid-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html