Cómo escribir en la memoria flash de los dispositivos

En esta página, se proporcionan detalles para ejecutar compilaciones en dispositivos específicos. Estos detalles complementan la información de Cómo compilar para Android.

Cómo compilar fastboot y adb

Si aún no cuentas con fastboot y adb, puedes compilarlos con el sistema de compilación habitual. Usa las instrucciones que se indican en la sección sobre cómo compilar para Android y reemplaza el comando make principal por este:

make fastboot adb

Consulta Android Debug Bridge (ADB) para obtener detalles sobre esta herramienta.

Cómo iniciar en el modo fastboot [Fastboot mode]

Puedes escribir en la memoria flash de un dispositivo cuando se encuentra en el modo de bootloader fastboot. Para entrar en el modo fastboot cuando un dispositivo está realizando un inicio en frío, utiliza la combinación de teclas que aparece en Combinaciones de teclas de fastboot.

También puedes usar el comando adb reboot bootloader para reiniciar directamente en el bootloader. Consulta Cómo escribir en la memoria flash de un dispositivo para obtener las instrucciones completas.

Cómo desbloquear el bootloader

Puedes escribir en la memoria flash un sistema personalizado solo si el bootloader lo permite. Sin embargo, ten en cuenta que el bootloader se bloquea de forma predeterminada. Puedes desbloquear el bootloader, pero como consecuencia se borrarán los datos del usuario por razones de privacidad. Una vez que lo desbloquees, se borrarán todos los datos del dispositivo, es decir, los datos privados y compartidos de las apps a los que se puede acceder a través de USB (lo que incluye fotos y películas). Antes de intentar desbloquear el bootloader, crea una copia de seguridad de los archivos importantes del dispositivo.

Debes desbloquear el bootloader una sola vez y, si fuera necesario, puedes volver a bloquearlo.

Cómo desbloquear dispositivos recientes

Todos los dispositivos Nexus y Pixel lanzados a partir de 2014 (comenzando con Nexus 6 y Nexus 9) cuentan con protección contra el restablecimiento de la configuración de fábrica y requieren un proceso de varios pasos para desbloquear el bootloader.

  1. Para habilitar el desbloqueo para OEM en el dispositivo, sigue estos pasos:
    1. En Configuración, presiona Acerca del dispositivo y, luego, Número de compilación siete veces.
    2. Cuando veas un mensaje que indica que ya eres desarrollador, presiona el botón Atrás.
    3. En Configuración, presiona Sistema, luego Opciones para desarrolladores y habilita Desbloqueo para OEM y Depuración por USB. (Si la opción Desbloqueo para OEM está inhabilitada, conéctate a Internet para que el dispositivo pueda acceder al menos una vez. Si permanece inhabilitada, es posible que el operador haya bloqueado la tarjeta SIM de tu dispositivo y que no se pueda desbloquear el bootloader).
  2. Reinicia el bootloader y usa fastboot para desbloquearlo.
    • Para dispositivos más nuevos (2015 y posteriores):
      fastboot flashing unlock
    • Para dispositivos más antiguos (2014 y anteriores):
      fastboot oem unlock
    Nota: Si ves el resultado "adb devices" antes del reinicio, pero fastboot o la secuencia de comandos de escritura en la memoria funcionan mal, es posible que haya problemas con tu cable USB. Prueba con otro puerto o cambia de conector. Si usas un puerto USB-C en la computadora, prueba con un puerto USB-A.
  3. Confirma el desbloqueo en pantalla.

Cómo volver a bloquear el bootloader

Para volver a bloquear el bootloader, haz lo siguiente:

  • Para dispositivos más nuevos (2015 y posteriores):
    fastboot flashing lock
  • Para dispositivos más antiguos (2014 y anteriores):
    fastboot oem lock

Cómo usar estados de bloqueo de escritura en la memoria flash

La API del sistema getFlashLockState() transmite el estado del bootloader y la API del sistema PersistentDataBlockManager.getFlashLockState() muestra el estado de bloqueo del bootloader en dispositivos compatibles.

Valor que se devuelve Condiciones
FLASH_LOCK_UNKNOWN Solo lo devuelven los dispositivos que se actualizaron a Android 7.x o versiones posteriores que no admitían cambios de bootloader necesarios para obtener el estado de bloqueo de la escritura en la memoria flash si admitían la función de bloqueo/desbloqueo de la escritura en la memoria flash.
  • Los dispositivos nuevos con Android 7.x o versiones posteriores deben estar en estado FLASH_LOCK_LOCKED o FLASH_LOCK_UNLOCKED.
  • Los dispositivos que se actualicen a Android 7.x o una versión posterior que no admitan la función de bloqueo/desbloqueo de escritura en la memoria flash deben devolver el estado FLASH_LOCK_LOCKED.
FLASH_LOCK_LOCKED Lo devuelve cualquier dispositivo que no admite bloqueo/desbloqueo de escritura en la memoria flash (es decir, el dispositivo siempre está bloqueado), o cualquier dispositivo que admite bloqueo/desbloqueo de escritura en la memoria flash y está en estado bloqueado.
FLASH_LOCK_UNLOCKED Lo devuelve cualquier dispositivo que admite bloqueo/desbloqueo de escritura en la memoria flash y está en estado desbloqueado.

Los fabricantes deben someter a prueba los valores que devuelven los dispositivos con bootloaders bloqueados y desbloqueados. Por ejemplo, el Proyecto de código abierto de Android (AOSP) contiene una implementación de referencia que devuelve un valor basado en la propiedad de inicio ro.boot.flash.locked. El código de ejemplo se encuentra en los siguientes directorios:

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java

Cómo seleccionar una compilación de dispositivo

Las compilaciones recomendadas del dispositivo se encuentran en el menú lunch, al que se accede cuando se ejecuta el comando lunch sin argumentos. Para obtener información adicional sobre el comando lunch, consulta Cómo elegir un destino. Para ver una lista de los destinos de compilación, consulta esta página sobre destinos de compilación.

Puedes descargar imágenes de fábrica y objetos binarios para dispositivos Nexus y Pixel desde developers.google.com. Para ello, ve a Objetos binarios del dispositivo. Para obtener detalles y recursos adicionales, consulta Cómo obtener objetos binarios exclusivos.

Dispositivo Nombre interno Configuración de compilación
Pixel 7 Pro cheetah aosp_cheetah-userdebug
Pixel 7 panther aosp_panther-userdebug
Pixel 6 Pro raven aosp_raven-userdebug
Pixel 6 oriole aosp_oriole-userdebug
Pixel 5 redfin aosp_redfin-userdebug
Pixel 4a 5G bramble aosp_bramble-userdebug
Pixel 4a sunfish aosp_sunfish-userdebug
Pixel 4 XL coral aosp_coral-userdebug
Pixel 4 flame aosp_flame-userdebug
Pixel 3a XL bonito aosp_bonito-userdebug
Pixel 3a sargo aosp_sargo-userdebug
Pixel 3 XL crosshatch aosp_crosshatch-userdebug
Pixel 3 blueline aosp_blueline-userdebug
Pixel 2 XL taimen aosp_taimen-userdebug
Pixel 2 walleye aosp_walleye-userdebug
Pixel XL marlin aosp_marlin-userdebug
Pixel sailfish aosp_sailfish-userdebug
HiKey hikey hikey-userdebug
Nexus 6P angler aosp_angler-userdebug
Nexus 5X bullhead aosp_bullhead-userdebug
Nexus 6 shamu aosp_shamu-userdebug
Nexus Player fugu aosp_fugu-userdebug
Nexus 9 volantis (flounder) aosp_flounder-userdebug
Nexus 5 (GSM/LTE) hammerhead aosp_hammerhead-userdebug
Nexus 7 (Wi-Fi) razor (flo) aosp_flo-userdebug
Nexus 7 (dispositivo móvil) razorg (deb) aosp_deb-userdebug
Nexus 10 mantaray (manta) full_manta-userdebug
Nexus 4 occam (mako) full_mako-userdebug
Nexus 7 (Wi-Fi) nakasi (grouper) full_grouper-userdebug
Nexus 7 (dispositivo móvil) nakasig (tilapia) full_tilapia-userdebug
Galaxy Nexus (GSM/HSPA+) yakju (maguro) full_maguro-userdebug
Galaxy Nexus (Verizon) mysid (toro) √aosp_toro-userdebug
Galaxy Nexus (Experimental) mysidspr (toroplus) aosp_toroplus-userdebug
Motorola Xoom (Wi-Fi de EE.UU.) wingray full_wingray-userdebug
Nexus S soju (crespo) full_crespo-userdebug
Nexus S 4G sojus (crespo4g) full_crespo4g-userdebug

Cómo escribir en la memoria flash de un dispositivo

Puedes escribir en la memoria flash un sistema Android completo con un solo comando. Cuando lo haces, se verifica que el sistema que se está escribiendo en la memoria flash sea compatible con el bootloader y la radio que hay instalados, se escriben juntas las particiones de inicio, de recuperación y del sistema y, luego, se reinicia el sistema. La función de escritura en la memoria flash también borra todos los datos del usuario, al igual que fastboot oem unlock.

Para escribir en la memoria flash de un dispositivo, sigue estos pasos:

  1. Descomprime el archivo de imagen en su propio directorio.
  2. Configura la variable de entorno ANDROID_PRODUCT_OUT para que apunte al mismo directorio que se usó en el paso 1.
  3. Para colocar el dispositivo en modo fastboot, mantén presionada la combinación de teclas correspondiente en el inicio o usa el siguiente comando:
    adb reboot bootloader
    .
  4. Una vez que el dispositivo esté en modo fastboot, ejecuta lo siguiente:
    fastboot flashall -w
    . La opción -w borra la partición /data del dispositivo. Es útil la primera vez que escribes en la memoria flash de un dispositivo específico, pero, en los demás casos, no es necesaria.

Configuraciones de la escritura en la memoria flash

Las instrucciones de fastboot se explican en un artefacto llamado fastboot-info.txt que se encuentra en $ANDROID_PRODUCT_OUT/*. Este documento .txt contiene una lista de tareas para que ejecute fastboot y se puede regenerar a través de m fastboot_info. Se puede modificar este archivo para introducir lógica de escritura personalizada en la memoria flash

Comandos compatibles:

  1. flash %s : Escribe una partición específica en la memoria flash. Los argumentos opcionales incluyen --slot-other, {filename_path}, --apply-vbmeta.
  2. update-super : Actualiza la partición super.
  3. if-wipe : Ejecuta otra funcionalidad de manera condicional si se especificó el borrado.
  4. erase %s: Borra una partición específica (solo se puede usar en conjunto) con if-wipe ->, p. ej., if-wipe erase cache.

Cómo restablecer dispositivos al estado de fábrica

Las imágenes de fábrica de los dispositivos de Google están disponibles en Imágenes de fábrica de dispositivos Nexus y Pixel. Las imágenes de fábrica del dispositivo Motorola Xoom las distribuye directamente Motorola.

Cómo resolver errores de denegación de permisos

De forma predeterminada, en la mayoría de los sistemas Linux, los usuarios sin privilegios no pueden acceder a los puertos USB. Si ves un error de denegación de permisos, consulta las instrucciones de Android Studio de Cómo configurar un dispositivo para desarrollo.

Si ya se estaba ejecutando adb y no puedes conectarte al dispositivo, puedes detener adb con adb kill-server. Este comando hace que se reinicie adb con la configuración nueva.