Lorsqu'un appareil Android 16 (ou version ultérieure) démarre, il est mis en mode reprise, ce qui vous permet de vous connecter à l'appareil à l'aide d'adb et d'utiliser une commande pour obtenir des informations sur l'appareil. Les conditions préalables suivantes doivent être remplies pour que l'appareil puisse passer en mode échange :
- La configuration d'usine de l'appareil doit être rétablie.
- L'appareil ne doit pas disposer d'un service mobile.
- L'appareil ne doit pas être connecté ni associé à un compte.
- L'appareil doit exécuter une version non débogable.
Le mode Trade In vous permet d'interroger des informations de diagnostic de base ou de passer en mode Évaluation, qui vous permet d'exécuter une gamme complète de commandes adb et d'effectuer des diagnostics supplémentaires sur l'appareil.
Recueillir des informations générales sur la santé
Pour recueillir des informations générales sur l'état de votre appareil, comme des informations sur la batterie, l'état de stockage et les codes IMEI (International Mobile Equipment Identity), procédez comme suit :
Assurez-vous que votre appareil remplit les conditions préalables pour le mode Échange.
Branchez l'appareil à un poste de travail.
Depuis le poste de travail, exécutez la commande suivante :
adb shell tradeinmode getstatus
Cette commande renvoie un objet JSON contenant des informations sur l'appareil. Voici un exemple de résultat obtenu sur 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 défini surtrue
, l'appareil est sécurisé et ne peut pas être réinitialisé. Si l'appareil ne peut pas être réinitialisé, il ne peut pas être évalué.
Identifier l'état de l'OS Android
Pour recueillir des informations sur l'état du système d'exploitation Android, par exemple pour savoir s'il s'agit d'une version approuvée, procédez comme suit :
- Branchez l'appareil à un poste de travail.
- Assurez-vous que l'appareil est connecté à Internet.
Depuis le poste de travail, exécutez la commande suivante :
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE est une chaîne alphanumérique générée de manière aléatoire, telle que
p4tRsuHjWB
. Cette commande renvoie un fichier JSON incluant un champ d'attestation contenant un enregistrement d'attestation en base64.Cette commande ajoute des informations d'attestation à celles renvoyées par la commande
getstatus
. Les informations d'attestation se présentent comme suit :"attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+
otCPK4VjmSjyYw ... }Les appareils équipés d'Android 16 ou version ultérieure nécessitent une connexion Internet pour créer un enregistrement d'attestation. L'attestation doit être effectuée en mode évaluation, après avoir configuré une connexion, car elle échoue si elle est effectuée dans l'assistant de configuration.
Analysez les informations d'attestation à l'aide de l'une des méthodes suivantes :
- Utilisez l'outil
parse_tim_attestation
qui est intégré lorsque vous compilez AOSP. - Utilisez une bibliothèque d'attestation de clé Android.
Par exemple, pour utiliser l'outil
parse_tim_attestation
, exécutez la commande suivante :parse_tim_attestation --challenge CHALLENGE output_file
Le CHALLENGE doit être le même que celui que vous avez utilisé pour obtenir les informations d'attestation.
Si vous avez enregistré le résultat de l'étape 2 dans un fichier output_file, vous pouvez fournir ce nom de fichier. Sinon, les informations d'attestation sont lues à partir de stdin.
Un objet JSON contenant les informations sur l'OS Android est renvoyé :
"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
est égal àyes
, le système d'exploitation est considéré comme fiable, la compilation est signée et l'IMEI n'est pas falsifié.Notez qu'une connexion Internet est nécessaire pour effectuer l'attestation, à la fois sur l'appareil et sur l'hôte.
- Utilisez l'outil
Tester le mode Trade In
Lors du développement, vous devez tester votre appareil pour vous assurer qu'il entre et sort correctement du mode Échange. Suivez ces étapes pour tester la capacité de votre appareil à passer en mode échange et à en sortir :
Branchez l'appareil à un poste de travail.
Sur la station de travail, redémarrez l'appareil en mode échange :
adb shell tradeinmode testing start
L'appareil redémarre et passe en mode échange. Une fois que vous êtes en mode échange, vous pouvez utiliser n'importe quelle commande
adb shell tradein
.Assurez-vous que le mode Échange est activé :
adb shell tradeinmode testing status
L'appareil identifie que le test du mode Échange est actif.
Quittez le mode Trade In et restaurez l'accès adb complet :
adb shell tradeinmode testing stop
Intégration d'un assistant de configuration personnalisé
La commande evaluate
ne fonctionne pas sur les appareils dotés d'assistants de configuration personnalisés, sauf si un récepteur de diffusion est ajouté. Pour ajouter un récepteur de diffusion à l'application d'assistant de configuration personnalisé :
Déclarez un récepteur dans le fichier manifeste de l'application :
<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 /receiverCréez un broadcast receiver semblable à celui-ci :
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. } }
Le destinataire doit effectuer les actions suivantes dans l'ordre.
- Vérifiez que
persist.adb.tradeinmode
est2
. - Vérifiez qu'il n'y a pas de protection après rétablissement de la configuration d'usine ni de verrouillage antivol.
- Provisionnez l'appareil en vous assurant que
Settings.Secure.USER_SETUP_COMPLETE
etSettings.Global.DEVICE_PROVISIONED
sont définis sur1
. - Fermez l'activité de l'assistant de configuration pour que l'appareil soit sur l'écran d'accueil.
À propos du mode Trade In
Cette section explique toutes les commandes du mode échange.
évaluer
adb shell tradeinmode evaluate
Passe en mode évaluation en ignorant l'assistant de configuration, comme si l'utilisateur avait ignoré manuellement chaque écran de configuration.
Après avoir ignoré l'assistant de configuration, vous pouvez exécuter des commandes ADB supplémentaires ou des tests fonctionnels sur l'appareil.
Une fois que vous quittez le mode évaluation, une réinitialisation des paramètres d'usine est effectuée pour s'assurer qu'aucun artefact de test n'est accidentellement transféré à des clients.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Renvoie une chaîne JSON contenant des informations système, y compris sur l'état de la batterie et de l'espace de stockage de l'appareil.
Incluez le paramètre --challenge
suivi d'une clé de challenge alphanumérique générée de manière aléatoire pour renvoyer un champ d'attestation supplémentaire. Analysez cette réponse pour identifier les informations clés du système d'exploitation, telles que l'état du bootloader (verrouillé ou déverrouillé) et la validité des numéros de série IMEI.
poweroff
adb shell tradeinmode poweroff
Éteint l'appareil. Utilisez cette commande pour éviter que la batterie ne se décharge lorsque l'appareil n'est pas en cours de test ni d'évaluation.
redémarrer
adb shell tradeinmode reboot
Redémarre l'appareil.
Début du test
adb shell tradeinmode testing start
Redémarre l'appareil en mode échange. Cette commande ne fonctionne que dans l'assistant de configuration. Lorsque vous exécutez cette commande, l'autorisation est ignorée et seules les commandes du mode échange fonctionnent.
Cette commande ne fonctionne que sur les appareils avec des versions userdebug
, eng
ou user
. La compilation user
doit avoir ro=debuggable=1
défini.
état du test
adb shell tradeinmode testing status
Indique si le test du mode échange est actif.
Cette commande ne fonctionne que sur les appareils avec des versions userdebug
, eng
ou user
. La compilation user
doit avoir ro=debuggable=1
défini.
arrêt du test
adb shell tradeinmode testing stop
Rétablit le mode de l'appareil avant l'exécution de la commande adb shell tradeinmode testing start
.
Cette commande ne fonctionne que sur les appareils avec des versions userdebug
, eng
ou user
. La compilation user
doit avoir ro=debuggable=1
défini.
testing wipe
adb shell tradeinmode testing wipe
Rétablit la configuration d'usine de l'appareil.
Cette commande ne fonctionne que sur les appareils avec des versions userdebug
, eng
ou user
. La compilation user
doit avoir ro=debuggable=1
défini.
wait-until-ready
adb shell tradeinmode wait-until-ready
Attend que les services système soient prêts pour que le mode reprise puisse fonctionner pleinement. Utilisez cette commande dans votre automatisation pour vous assurer que les commandes du mode échange fonctionnent.
Vous pouvez ajouter wait-until-ready
avant les autres commandes du mode Échange. Par exemple, voici wait-until-ready
enchaîné à getstatus
:
adb shell tradeinmode wait-until-ready getstatus