Cómo las particiones A/B y las actualizaciones integradas afectan el desarrollo personalizado en XDA

click fraud protection

Es posible que haya oído hablar de las Actualizaciones integradas antes. Se trata de algo llamado "particiones A/B". ¿Qué es y cómo afecta al desarrollo personalizado en XDA?

Cuando se lanzó Android Nougat, nos hizo hablar de todo tipo de características nuevas. Para empezar, obtuvimos una interfaz de usuario recientemente actualizada junto con las tan esperadas capacidades de ventanas múltiples y compatibilidad con la API de gráficos Vulkan. Pero una adición bajo el capó pasó por alto a la mayoría de los usuarios. Android Nougat introdujo "Actualizaciones perfectas" en dispositivos que admiten particiones A/B. La gran mayoría de los dispositivos Android existentes (excluyendo los nuevos Google Pixel y Google Pixel XL) no tenían particiones A/B en ese momento y, por lo tanto, no podían aprovechar las actualizaciones perfectas. La premisa básica de esta característica es que el dispositivo tiene un segundo conjunto de particiones del sistema, de arranque, de proveedor y otras particiones importantes, y cuando obtiene una OTA actualizar la actualización se realiza en segundo plano mientras se parchea el segundo conjunto de particiones, lo que le permite reiniciar sin problemas en una versión de software actualizada. Si falla una actualización, volverá a tener una versión funcional, lo que significa que las empresas tendrán menos dolores de cabeza con los que lidiar y los consumidores estarán mejor protegidos.

La compatibilidad con actualizaciones perfectas no es un requisito para ningún dispositivo Android nuevo, a diferencia de Project Treble. Como tal, la gran mayoría de los nuevos dispositivos Android no son compatibles con esta función. Hemos estado manteniendo una lista de todos los dispositivos compatibles hasta ahora., y está claro que esta característica no es ampliamente compatible. Es una pena porque las particiones A/B aportan muchos beneficios tanto para los usuarios habituales como para los usuarios avanzados. Sin embargo, la característica tiene un poco de mala reputación en la comunidad de entusiastas porque se percibe que dificulta el desarrollo de Android y la actualización de modificaciones personalizadas. En realidad, este no es el caso, por lo que queríamos desmitificar las actualizaciones integradas y explicar cómo las particiones A/B afectan el desarrollo personalizado en XDA.

Muchas gracias al miembro senior de XDA. npjohnson, a colaborador de, asistente de, ayudante de, contribuyente para LineageOS y mantenedor de la Motorola Moto Z2 Force, quien nos ayudó a verificar este artículo.


Particiones en un dispositivo Android

Una partición es simplemente una sección discreta del almacenamiento interno del teléfono donde se guardan los datos. El tipo de datos que se guardan en cada partición depende del hardware, el sistema operativo y muchos otros factores. El gestor de arranque tendrá uno, el sistema (SO Android) tendrá uno, los datos del usuario tendrán uno... y así sucesivamente y así sucesivamente. Cuando ves que la gente habla de "/system" y "/cache", se refieren a los nombres de pila de esas particiones. El OnePlus 6, por ejemplo, tiene 72 particiones. Parece mucho, pero el OnePlus 6 es uno de los dispositivos que admite actualizaciones perfectas, lo que significa que muchas de estas particiones son simplemente duplicados entre sí.

Salida parcial de las particiones en el OnePlus 6. Algunas particiones A/B están subrayadas con fines de demostración.

Hay muchas particiones en un dispositivo de las que nunca tendrás que preocuparte como usuario. Muchas de estas particiones nunca se modifican cuando se actualizan ROM, kernels, recuperaciones o modificaciones personalizadas como Magisk o Xposed. Muchas de estas particiones no se utilizarán para nuestros propósitos o son demasiado peligrosas para tocarlas a menos que sepa lo que está haciendo (XLOADER y OEMINFO en Huawei/Honor dispositivos vienen a la mente.) Para la gran mayoría de los usuarios de Android, las particiones con las que tratamos principalmente son sistema, arranque, recuperación, datos de usuario y, más recientemente, proveedor y vbmeta. Aquí hay una breve explicación del propósito de cada partición:

  • sistema: contiene el sistema operativo Android, bibliotecas del sistema, aplicaciones del sistema y otros medios del sistema como animaciones de arranque, fondos de pantalla, tonos de llamada, etc.
  • arranque: contiene el kernel, el disco RAM y, en dispositivos A/B, también la recuperación.
  • recuperación: mantiene la recuperación, donde TWRP se actualiza con mayor frecuencia en dispositivos solo A (los dispositivos A/B no tienen una partición de recuperación dedicada)
  • datos de usuario: contiene todos los datos de su aplicación, sistema y almacenamiento interno
  • Proveedor: contiene HAL específicos de la plataforma y del dispositivo, los archivos necesarios para que el sistema operativo Android se comunique con el hardware subyacente.
  • vbmeta: la partición para Android Verified Boot 2.0 que verifica la integridad del proceso de arranque

Los OEM de dispositivos pueden cambiar sus esquemas de partición para usar el diseño que deseen. Por ejemplo, Huawei divide la partición de arranque en ramdisk_recovery y kernel. También hay muchas particiones adicionales que pueden contener otras aplicaciones del sistema, como cust, product y oem, y aunque estos son seguros de modificar, generalmente no se recomienda si desea que le resulte más fácil volver al stock. Entonces, ¿dónde juegan un papel las particiones A/B?


El esquema de partición A/B

Cómo funcionan las actualizaciones en dispositivos con actualizaciones perfectas

La imagen muy simple que hice a continuación ilustra cómo se maneja una actualización en un dispositivo compatible con particiones A/B. La partición que se ilustra es la partición del sistema, aunque otras particiones, como la de arranque y la de proveedor, también pueden actualizarse con cualquier actualización OTA de un OEM. Este proceso de actualización ocurre no solo con las principales actualizaciones de la versión de Android, sino también con las actualizaciones de parches de seguridad.

  1. Comenzamos con dos particiones del sistema, system_a y system_b, ambas en la misma versión de Android.
  2. Suponiendo que system_a esté activo, la actualización OTA parcheará system_b, la partición inactiva, en segundo plano.
  3. system_a se establece como inactivo y system_b se activa una vez que el usuario reinicia.
  4. La partición ahora inactiva, system_a, se actualizará cuando se lance la próxima actualización OTA.

¿Cuáles son los beneficios de este proceso de actualización?

  1. Si falla una actualización, el dispositivo volverá a la versión funcional en la otra ranura.
  2. Sus datos se mantienen perfectamente intactos, incluso si se interrumpe la actualización, ya que solo hay una partición (datos de usuario) que alberga sus datos.
  3. Transmisión de actualización: si su partición de datos está llena, la actualización se puede descargar y transmitir a la ranura inactiva. Es una característica bastante interesante y significa que no tienes que desperdiciar almacenamiento temporal en tus actualizaciones. Es por eso que no hay partición de caché en los dispositivos A/B, ya que ya no son necesarios.

¿Qué impacto tiene el esquema de partición A/B en el almacenamiento de un dispositivo?

¿El hecho de que las actualizaciones fluidas den como resultado un montón de particiones duplicadas significa que estás perdiendo mucho espacio de almacenamiento? De nada. Google dice que los dispositivos con soporte de actualización perfecta solo deberían tener una caída de unos pocos cientos de megabytes gracias a la eliminación de las particiones /cache y /recovery. Quitar ambas equilibra el costo de agregar un segundo conjunto de particiones. Según Google, la imagen del sistema A/B del Pixel tiene la mitad del tamaño de la imagen del sistema solo A. La mayor parte del uso de almacenamiento adicional en realidad proviene de la adición de una segunda partición de proveedor. Esto tiene sentido ya que la partición del proveedor alberga todos los archivos binarios propietarios utilizados por los OEM (parte del Proyecto Treble), por lo que se espera que ocupe bastante espacio. Si bien Google no recomienda tener particiones A/B en dispositivos con 4 GB de almacenamiento (ya que es casi el 10% del almacenamiento total disponible), sí lo recomiendan en dispositivos con 8 GB y más.

A continuación se muestra un desglose del espacio de almacenamiento utilizado en un Google Pixel con y sin particiones A/B.

Tamaños de partición

A/B

solo A

Cargador de arranque

50MB*2

50MB

Bota

32MB*2

32MB

Recuperación

32MB

Cache

100MB

Radio

70MB*2

70MB

Proveedor

300MB*2

300MB

Sistema

2048MB*2

4096MB

Total

5000MB

4680MB

¿Qué pasó con la partición de recuperación?

El kernel de Linux subyacente en los dispositivos Android es lo que permite a Android reconocer y utilizar correctamente el hardware en un teléfono inteligente. En los dispositivos Android solo A, generalmente tiene dos versiones del kernel: una está empaquetada dentro de la partición de recuperación mientras que la otra está en la partición de inicio. En los dispositivos A/B que admiten actualizaciones integradas, la recuperación ahora se encuentra dentro de la imagen de arranque junto con el kernel. La función principal de la recuperación era instalar actualizaciones, pero como eso lo maneja el propio sistema (motor_actualización) mientras se inicia Android, la partición de recuperación dedicada ya no es necesaria.

Para instalar una recuperación personalizada en dispositivos A/B, necesitamos modificar la partición de arranque y reemplazar la recuperación original por la nuestra. Es por eso que para instalar TWRP necesita usar un comando fastboot para iniciar primero una imagen de inicio personalizada y entonces actualice el script de instalación TWRP, ya que fastboot no puede parchear particiones; solo actualice sobre ellas por completo. Técnicamente, podría parchear previamente su imagen de arranque existente con TWRP y luego actualizarla mediante fastboot, pero eso es más problema de lo que vale. El script del instalador de TWRP parchea las particiones boot_a y boot_b para instalar TWRP.

Dato curioso: el motor de actualización de Android que maneja actualizaciones perfectas básicamente se extrae directamente del sistema operativo Chrome. Solo recientemente Se eliminaron las cadenas que contenían "Chrome OS" del registro de update_engine para evitar confusión a cualquiera que revise logcat.

¿Mi teléfono inteligente Android admite particiones A/B para actualizaciones perfectas?

Mientras nosotros mantener una lista de todos los dispositivos que lo apoyan, También puedes comprobarlo tú mismo fácilmente..


¿Cómo afectan las actualizaciones fluidas al desarrollo personalizado?

Percepción del usuario sobre las particiones A/B

Consideradas por muchos usuarios un obstáculo para el desarrollo de software personalizado, las actualizaciones perfectas son en realidad una bendición para los desarrolladores. La razón por la que se percibe que los dispositivos A/B tienen un soporte de desarrollo deficiente se debe al precio de los primeros dispositivos A/B. Después de todo, los dispositivos Google Pixel fueron algunos de los primeros en admitir actualizaciones perfectas y, en comparación con los teléfonos inteligentes Nexus de antaño, eran relativamente caros. Además, gracias a la gran cantidad de mejoras que Google ha estado realizando en el sistema operativo Android, que ha creado ROM personalizadas y modificaciones menos populares en los dispositivos de Google, los teléfonos inteligentes Google Pixel no despegaron en nuestros foros tan bien como el Nexus teléfonos inteligentes. Una combinación de factores externos llevó a una disminución en el desarrollo personalizado en los teléfonos inteligentes Google Pixel, aunque la mayoría de los usuarios optaron por culpar al soporte de partición A/B. Compare la disponibilidad de desarrollo personalizado en dispositivos como el Google Pixel con dispositivos como el Xiaomi Mi A1 en nuestros foros.

Además, la falta de comprensión de cómo las particiones A/B cambiaron la forma en que los usuarios necesitan instalar ROM, kernels, recuperaciones y modificaciones personalizadas llevó a que el soporte de particiones A/B fuera impopular. Ahora que la recuperación se encuentra dentro de la imagen de arranque, las modificaciones parpadeantes en el orden incorrecto, como Magisk o Xposed, pueden causar conflictos y provocar un bucle de arranque. El orden en el que actualizas estos mods puede ser importante, aunque en el caso de las ROM personalizadas no deberías preocuparte por la ranura en la que estás actualizando. Contrariamente a la creencia común, el script de instalación de la mayoría de las ROM personalizadas no parpadea en ambas ranuras. En general, no necesita preocuparse por eso, ya que no debería necesitar cambiar las ranuras manualmente.

Cómo ven los desarrolladores las particiones A/B

Al crear una ROM, los desarrolladores pueden utilizar ambas particiones para probar compilaciones separadas. Si uno no funciona, simplemente pueden volver a la partición que funciona y reconstruir su ROM. Los desarrolladores también pueden probar las regresiones simplemente instalando una actualización, cambiando la partición activa y comparando las dos sin tener que borrar datos. Así es como el equipo de LineageOS ve el soporte de particiones A/B:

"Muchos en la comunidad de Android han criticado a A/B como 'difícil de soportar' y 'no amigable para los desarrolladores', cuando en realidad, implementado correctamente es más fácil de apoyar e igual de amigable para los desarrolladores." - jrizzoli, Registro de cambios de LineageOS 19

La dificultad inicial con el soporte A/B para los desarrolladores surgió de la modificación de sus herramientas existentes para admitir estos dispositivos. El desarrollador de Magisk, topjohnwu, agregó soporte oficial para Google Pixel un año después de su lanzamiento. lanzado, no porque fuera difícil, sino porque le tomó un año obtener el dispositivo para trabajar en. Soporte TWRP llegó bastante rápido en dispositivos A/B después de que el desarrollador principal, Dees_Troy, lo intentara. LineageOS 15.1 ahora apoya Dispositivos A/B después de que los voluntarios encontraran tiempo para arreglar su script addon.d.

Cómo actualizar un dispositivo A/B que tiene un recovery personalizado, kernel u otras modificaciones

ROM personalizadas

Actualizar actualizaciones en un dispositivo con una ROM personalizada significa que también tendrás que tener cuidado con la ranura que estás actualizando, ¿verdad? No exactamente. TWRP en realidad manejará mucho de eso por usted, y de forma predeterminada utiliza la ranura inactiva para actualizar una ROM personalizada. Si su ranura activa es A y actualiza una ROM personalizada, en realidad está actualizando a la ranura B. Cuando reinicia, la ranura activa ahora es B. Los desarrolladores pueden modificar el script de instalación y flashear en ambas ranuras para que sea más fácil para el usuario final, aunque la mayoría de los scripts de instalación de ROM personalizados actualmente solo flashean en una sola ranura. Por último, las ROM personalizadas pueden implementar un actualizador A/B en su ROM para que los usuarios ni siquiera tengan que meterse con Actualización manual de actualizaciones: el último LineageOS 15.1 incluye una herramienta Lineage Updater y XDA Senior Member EE.UU.-RedDragon hecho una actualizador A/B genérico que otros desarrolladores pueden utilizar.

ROM estándar

¿Pero no es problemático si su dispositivo ejecuta la ROM estándar con varias modificaciones y desea instalar una actualización sin perder todas estas modificaciones? Puede serlo si no conoce los pasos correctos para instalar una actualización. En OnePlus 6, por ejemplo, no puede actualizar una OTA incremental en su dispositivo modificado porque la OTA incremental intentará parchear su imagen de arranque modificada. Por lo tanto, es probable que termines con un bucle de arranque y es por eso que debes actualizar la ROM completa para sobrescribir completamente la imagen de arranque modificada. Estos son los pasos generales que debe seguir para instalar una actualización de OxygenOS en su OnePlus 6 manteniendo TWRP, Magisk y, opcionalmente, un kernel personalizado.

  1. Descargado lo último ROM completa cremallera
  2. Actualice el zip de la ROM completa en recuperación
  3. (Opcional) Kernel personalizado Flash
  4. Instalador flash TWRP
  5. Reinicie directamente a la recuperación
  6. Magisco Destello

En los dispositivos Google Pixel, puedes flashear la imagen de fábrica sin borrar datos, luego inicie TWRP, instale TWRP a través del script de instalación, luego instale Magisk.

Extracción de una actualización para flashear imágenes de particiones individuales

Los archivos de actualización para muchos dispositivos A/B son un poco diferentes en comparación con los dispositivos A-only. Ya no son solo un archivo zip que contiene muchas imágenes (excluyendo las imágenes de fábrica de Google y Razer), sino que tienen la forma de un archivo payload.bin. Puede extraer este archivo y actualizar cada parte manualmente, pero se requiere una herramienta especial para hacerlo. Si estás interesado en aprender cómo hacerlo en OnePlus 6, Xiaomi Mi A1 y muchos otros dispositivos A/B, sigue leyendo.

Configurando para extraer payload.bin

  1. Asegúrate de tener Python 3.6 instalado.
  2. Descargue payload_dumper.py y update_metadata_pb2.py aquí.
  3. Extraiga su zip OTA y coloque payload.bin en la misma carpeta que estos archivos.
  4. Abra PowerShell, símbolo del sistema o terminal según su sistema operativo.
  5. Ingrese el siguiente comando: python -m pip install protobuf
  6. Cuando haya terminado, ingrese este comando: python payload_dumper.py payload.bin
  7. Esto comenzará a extraer las imágenes dentro del archivo payload.bin a la carpeta actual en la que se encuentra.

Puede actualizar cada una de estas imágenes por separado ahora mediante fastboot si lo desea. La siguiente sección le muestra cómo hacerlo.

Uso de fastboot para mostrar imágenes en un dispositivo que admita actualizaciones perfectas

Hay una serie de comandos que son exclusivos de los dispositivos del sistema de partición A/B. Puede cambiar su ranura activa y flashear a ranuras específicas. Si tienes un proyecto Treble-dispositivo compatible y quieres aprender a flash Sistema genérico Imágenes, deberías estar familiarizado con estos comandos. Eche un vistazo a la siguiente tabla.

Comandos de arranque rápido

Dominio

Obtener el espacio activo actual

fastboot getvar todo | grep "current-slot" Si estás en una PC con Windows, el comando "grep" no funcionará.

Establecer otra ranura como activa

fastboot set_active otro

Establecer la ranura especificada como activa

fastboot set_active $ORfastboot --set-active=_$slotdonde $ es a o b

Imagen flash en la partición especificada en la ranura actual

partición flash fastboot partición.img

Imagen flash en la partición especificada en la ranura especificada

partición flash fastboot_a partición.imgpartición flash fastboot_b partición.img

(Nota: en dispositivos A/B, puede especificar una partición en una ranura en particular para flashear o puede omitir el sufijo de la ranura y parpadeará en la ranura activa actual. Por ejemplo, puede reemplazar "partición" en el comando flash con "sistema", "sistema_a" o "sistema_b").

En las PC con Windows, no puede usar grep, así que simplemente elimine esa parte y busque "ranura actual".

Unas palabras sobre Project Treble y actualizaciones perfectas

Un error común es pensar que la compatibilidad con Project Treble y la compatibilidad con particiones A/B están relacionadas entre sí, pero en realidad ese no es el caso. Tener uno no implica el otro. El Motorola Moto Z2 Force utiliza un esquema de partición A/B pero no es compatible con Treble. Por otro lado, el Honor 9 Lite es compatible con Project Treble, pero es un dispositivo exclusivo.

El Honor 9 Lite es compatible con Project Treble pero no con Seamless Updates

Preguntas frecuentes/Resumen

  • ¿Cuáles son los beneficios de la partición A/B?
    • La partición A/B le permite actualizar su teléfono inteligente Android mientras lo usa, simplemente reiniciando cuando esté listo para iniciar la nueva versión. También actúa como protección contra los bloqueos: si la actualización sale mal, volverás a la instalación funcional.
  • ¿Tener particiones A/B obstaculiza el desarrollo?
    • Si bien a los desarrolladores les tomó un poco de tiempo adaptarse, la respuesta es prácticamente no. De hecho, puede ayudar a los desarrolladores, ya que pueden realizar un arranque dual de su ROM personalizada con la versión anterior y una nueva versión de prueba para comprobar si hay regresiones.
  • ¿Cómo afectan las particiones A/B a mods como kernels personalizados, Magisk o Xposed?
    • Hay que tener cuidado al instalarlos, pero actualmente no hay problemas. Magisk admite oficialmente dispositivos con actualizaciones perfectas y, siempre que actualice las cosas en el orden correcto, no debería tener problemas. Asegúrese de actualizar el kernel personalizado antes de actualizar sus otras modificaciones, y debería estar listo para comenzar.
  • ¿Puedo actualizar dos ROM diferentes en cada partición y arranque dual?
    • En teoría, sí. Sin embargo, surgen problemas debido a la partición de datos compartidos, por lo que no se recomienda.
  • ¿Tener un esquema de partición A/B significa que tengo almacenamiento reducido?
    • ¡No! Google dice que los dispositivos que admiten actualizaciones perfectas sólo sacrifican unos pocos cientos de megabytes de almacenamiento para admitirlas. Los beneficios superan ese costo.
  • Mi dispositivo admite particiones A/B, ¿eso significa que puedo utilizar una imagen genérica del sistema de Project Treble?
    • No necesariamente. La compatibilidad con Project Treble y A/B no está relacionada. El Motorola Moto Z2 Force no es compatible con Project Treble, pero sí con el esquema de partición A/B.
  • Mi dispositivo es compatible con Project Treble, ¿eso significa que tengo un esquema de partición A/B?
    • Este no es siempre el caso. El Honor 9 Lite es un excelente ejemplo, ya que es compatible con Project Treble pero no tiene un esquema de partición A/B.
  • ¿Por qué necesito iniciar TWRP con fastboot primero y luego actualizarlo?
    • Esto se debe a cómo funciona fastboot y al hecho de que la partición de recuperación ya no existe. La recuperación se coloca dentro de la partición de inicio, por lo que tenemos que modificar tanto boot_a como boot_b. No puede parchear una partición en fastboot, solo actualizarla. En teoría, podrías crear una imagen de arranque preparchada y luego actualizarla.
  • ¿Existe algún peligro con las particiones A/B? ¿Cómo afecta la protección de reversión a las cosas?
    • Google ha hecho todo lo posible para que esto no sea un problema, pero en el caso del Motorola Moto Z2 Force, hubo casos conocidos de un dispositivo que reactivó la ranura anterior después de actualizar a Android Oreo. Esto significó que se activó la protección de reversión y los propietarios de dispositivos solo pudieron rescatar su teléfono inteligente con la recuperación EDL. Sin embargo, Google dice que la protección de reversión solo se activa después del primer arranque, por lo que la ranura debe estar funcionando completamente después de una actualización antes de que ya no puedas degradar.