Cuando se inicia un dispositivo con Android 16 (o una versión posterior), se pone en modo de intercambio, lo que te permite conectarte al dispositivo con adb y usar un comando para obtener información sobre él. Para que el dispositivo entre en el modo de intercambio, deben cumplirse las siguientes condiciones previas:
- Se debe restablecer la configuración de fábrica del dispositivo.
- El dispositivo no debe tener servicio celular.
- El dispositivo no debe tener conectividad ni una cuenta establecida.
- El dispositivo debe ejecutar una compilación no depurable.
El modo de intercambio te permite consultar información de diagnóstico básica o ingresar al modo de evaluación, que te permite realizar una amplia variedad de comandos de adb y ejecutar diagnósticos adicionales en el dispositivo.
Recopila información general sobre la salud
Para recopilar información general sobre el estado de tu dispositivo, como información sobre la batería, el estado de almacenamiento y los números de identidad internacional de equipo móvil (IMEI), sigue estos pasos:
Asegúrate de que tu dispositivo cumpla con las condiciones previas para el modo de intercambio.
Conecta el dispositivo a una estación de trabajo.
Desde la estación de trabajo, ejecuta el siguiente comando:
adb shell tradeinmode getstatus
Este comando devuelve un objeto JSON con información sobre el dispositivo. A continuación, se muestra un ejemplo del resultado de un Pixel 7:
{ "battery": { "cycle_count": 16, "health": 100, "state": 2, "manufacturing_date": 1653004800, "first_usage_date": 0 }, "storage": { "useful_lifetime_remaining": 99, "capacity_bytes": "128000000000" }, "launch_level": 33, "locks": { "factory_reset_protection": false }, "product": { "brand": "google", "device": "panther", "manufacturer": "Google", "model": "Pixel 7", "name": "panther" }, "imeis": [ "353644930127905", "353644930127913" ], "serial": "26061FDH2000AP" }
Si
factory_reset_protection
está configurado comotrue
, el dispositivo está protegido y no se puede restablecer. Si no se puede restablecer el dispositivo, no se podrá evaluar.
Cómo identificar el estado del SO Android
Para recopilar información sobre el estado del sistema operativo Android, por ejemplo, si es una compilación aprobada, sigue estos pasos:
- Conecta el dispositivo a una estación de trabajo.
- Asegúrate de que el dispositivo tenga conexión a Internet.
Desde la estación de trabajo, ejecuta el siguiente comando:
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE es una cadena alfanumérica generada de forma aleatoria, como
p4tRsuHjWB
. Este comando devuelve JSON, incluido un campo de certificación que contiene un registro de certificación en base64.Este comando agrega información de certificación a la información que devuelve el comando
getstatus
. La información de certificación se ve de la siguiente manera:"attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+
otCPK4VjmSjyYw ... }Los dispositivos que se lancen con Android 16 o versiones posteriores requieren conectividad a Internet para crear un registro de certificación. La certificación debe realizarse en el modo de evaluación, después de configurar una conexión, ya que falla si se realiza en el asistente de configuración.
Analiza la información de la certificación con uno de los siguientes métodos:
- Usa la herramienta
parse_tim_attestation
que se compila cuando compilas el AOSP. - Usa una biblioteca de certificación de claves de Android.
Por ejemplo, para usar la herramienta
parse_tim_attestation
, ejecuta el siguiente comando:parse_tim_attestation --challenge CHALLENGE output_file
El CHALLENGE debe ser el mismo desafío que usaste para obtener la información de certificación.
Si guardaste el resultado del paso 2 en un output_file, puedes proporcionar ese nombre de archivo. De lo contrario, la información de certificación se lee desde stdin.
Se devuelve un objeto JSON con la información del SO Android:
"record": { "keymaster_version": "400", "keymaster_security_level": "TRUSTED_ENVIRONMENT", "attributes": { "imeis": [ "353644930125669", "353644930125677" ], "vendor_patch_level": 20250305, "serial": "26161FDH2000NV", "os_version": 160000, "source": "hardware", "boot_patch_level": 20250305 }, "
bootloader_locked": false, "verified_boot": false, "security_level": "TRUSTED_ENVIRONMENT" }, "certificate": "verified", "trustworthy": "verified boot disabled"Si
trustworthy
es igual ayes
, se considera que el sistema operativo es de confianza, la compilación está firmada y el IMEI no está falsificado.Ten en cuenta que se necesita conectividad a Internet para realizar la certificación, tanto en el dispositivo como en el host.
- Usa la herramienta
Modo de prueba de trade-in
Durante el desarrollo, debes probar tu dispositivo para asegurarte de que entre y salga correctamente del modo de intercambio. Sigue estos pasos para probar la capacidad del dispositivo de entrar y salir del modo de intercambio:
Conecta el dispositivo a una estación de trabajo.
Desde la estación de trabajo, reinicia el dispositivo en modo de intercambio:
adb shell tradeinmode testing start
Se reinicia el dispositivo y se activa el modo de intercambio. Después de ingresar al modo de intercambio, puedes usar cualquier comando de
adb shell tradein
.Asegúrate de que el modo de intercambio esté activo:
adb shell tradeinmode testing status
El dispositivo identifica que la prueba del modo de intercambio está activa.
Para salir del modo de intercambio y restablecer el acceso completo a adb, haz lo siguiente:
adb shell tradeinmode testing stop
Integración del asistente de configuración personalizado
El comando evaluate
no funcionará en dispositivos con asistentes de configuración personalizados, a menos que se agregue un receptor de transmisiones. Para agregar un receptor de emisión a la app del asistente de configuración personalizado, haz lo siguiente:
Declara un receptor en el manifiesto de la app:
<receiver android:name=".EnterEvaluationModeReceiver" android:exported="true" android:permission="android.permis>sio<n.ENTER_TRADE>_IN_M<ODE" intent-filter action android:name="com.google.android>.setu<pwizard.ENTER_TRADE_IN_MODE" / category android:>nam<e="androi>d<.intent.c>a
tegory.DEFAULT" / /intent-filter /receiverCrea un receptor de emisión similar al siguiente:
public class EnterEvaluationModeReceiver extends BroadcastReceiver { private static final String TRADE_IN_MODE_PROPERTY = "persist.adb.tradeinmode"; private static final int TIM_EVALUATION_MODE = 2; @Override public void onReceive(Context context, Intent intent) { if (SystemProperties.getInt(TRADE_IN_MODE_PROPERTY, 0) != TIM_EVALUATION_MODE) { return; } // Check if any factory reset protection is enabled. // Provision the device. // End the setup wizard activ
ity. } }
El receptor debe realizar las siguientes acciones en orden.
- Comprueba que
persist.adb.tradeinmode
sea2
. - Verifica que no haya protección contra restablecimiento de la configuración de fábrica ni bloqueos antirrobo.
- Aprovisiona el dispositivo y asegúrate de que
Settings.Secure.USER_SETUP_COMPLETE
ySettings.Global.DEVICE_PROVISIONED
sean1
. - Descarta la actividad del asistente de configuración para que el dispositivo esté en la pantalla principal.
Referencia del modo de intercambio
En esta sección, se explican todos los comandos del modo de intercambio.
evaluar
adb shell tradeinmode evaluate
Ingresa al modo de evaluación omitiendo el asistente de configuración como si el usuario hubiera omitido manualmente cada pantalla de configuración.
Después de omitir el asistente de configuración, puedes ejecutar comandos de ADB adicionales o pruebas funcionales en el dispositivo.
Después de salir del modo de evaluación, se restablece la configuración de fábrica para garantizar que ningún artefacto de las pruebas se transfiera accidentalmente a los clientes.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Devuelve una cadena JSON con información del sistema del dispositivo, incluida la información sobre el estado de la batería y el almacenamiento.
Incluye el parámetro --challenge
seguido de una clave de desafío alfanumérica generada de forma aleatoria para devolver un campo de certificación adicional. Analiza esta respuesta para identificar información clave del sistema operativo, como el estado del cargador de arranque (bloqueado o desbloqueado) y la validez de los números de serie del IMEI.
poweroff
adb shell tradeinmode poweroff
Apaga el dispositivo. Usa este comando para evitar que se agote la batería mientras no se prueba ni evalúa el dispositivo de forma activa.
reiniciar
adb shell tradeinmode reboot
Reinicia el dispositivo.
Inicio de la prueba
adb shell tradeinmode testing start
Reinicia el dispositivo en modo de intercambio. Este comando solo funciona dentro del asistente de configuración. Cuando se emite este comando, se omite la autorización y solo funcionan los comandos del modo de intercambio.
Este comando solo funciona en dispositivos con compilaciones userdebug
, eng
o user
. La compilación de user
debe tener establecido ro=debuggable=1
.
Estado de la prueba
adb shell tradeinmode testing status
Identifica si las pruebas del modo de intercambio están activas.
Este comando solo funciona en dispositivos con compilaciones userdebug
, eng
o user
. La compilación de user
debe tener establecido ro=debuggable=1
.
Parada de prueba
adb shell tradeinmode testing stop
Devuelve el dispositivo al modo en el que estaba antes de que emitieras el comando adb shell tradeinmode testing start
.
Este comando solo funciona en dispositivos con compilaciones userdebug
, eng
o user
. La compilación de user
debe tener establecido ro=debuggable=1
.
toallita de prueba
adb shell tradeinmode testing wipe
Restablece la configuración de fábrica del dispositivo.
Este comando solo funciona en dispositivos con compilaciones userdebug
, eng
o user
. La compilación de user
debe tener establecido ro=debuggable=1
.
wait-until-ready
adb shell tradeinmode wait-until-ready
Espera hasta que los servicios del sistema estén listos para que el modo de intercambio funcione por completo. Usa este comando en tu automatización para asegurarte de que los comandos del modo de intercambio se ejecuten correctamente.
Puedes agregar wait-until-ready
antes de otros comandos del modo de intercambio. Por ejemplo, aquí se muestra wait-until-ready
encadenado a getstatus
:
adb shell tradeinmode wait-until-ready getstatus