Lorsqu'un appareil Android 16 (ou version ultérieure) démarre, il est mis en mode échange, 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 passe en mode échange:
- La configuration d'usine de l'appareil doit être rétablie.
- L'appareil ne doit pas être connecté à un réseau mobile.
- L'appareil ne doit pas être connecté ni associé à un compte.
- L'appareil doit exécuter un build non débogable.
Une fois que vous avez parcouru l'assistant de configuration, l'appareil est placé en mode évaluation, ce qui vous permet d'exécuter une gamme complète de commandes adb et d'exécuter des diagnostics supplémentaires sur l'appareil.
Recueillir des informations générales sur la santé
Pour obtenir des informations générales sur l'état de santé de votre appareil, comme des informations sur la batterie, l'état de santé de l'espace de stockage et les numéros 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.
Sur 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 d'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 collecter des informations sur l'état du système d'exploitation Android, par exemple pour savoir s'il s'agit d'un build approuvé, procédez comme suit:
- Branchez l'appareil à un poste de travail.
- Assurez-vous que l'appareil est connecté à Internet.
Sur 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 aux informations 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
créé lorsque vous compilez AOSP. - Utilisez une bibliothèque d'attestation de clé Android.
Par exemple, pour utiliser l'outil
parse_tim_attestation
, exécutez:parse_tim_attestation --challenge CHALLENGE output_file
CHALLENGE doit être le même défi que celui que vous avez utilisé pour obtenir les informations d'attestation.
Si vous avez enregistré la sortie de l'étape 2 dans un 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. Le build est signé 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 passe correctement en mode échange et en sort. Pour tester la capacité de votre appareil à passer en mode échange et à en sortir, procédez comme suit:
Branchez l'appareil à un poste de travail.
Depuis 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 entré 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 les tests du mode d'échange sont actifs.
Quittez le mode Trade In et rétablissez l'accès complet à l'ADB:
adb shell tradeinmode testing stop
Intégration de l'assistant de configuration personnalisé
La commande evaluate
ne fonctionne pas sur les appareils avec des assistants de configuration personnalisés, sauf si un broadcast receiver est ajouté. Pour ajouter un broadcast receiver à l'application de l'assistant de configuration personnalisée:
Déclarez un destinataire dans le fichier manifeste de l'application:
<receiver android:name=".EnterEvaluationModeReceiver" android:exported="true" android:permission="android.permission.ENTER_TRADE_IN_MODE"> <intent-filter> <action android:name="com.google.android.setupwizard.ENTER_TRADE_IN_MODE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
Créez un broadcast receiver semblable à:
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 activity. } }
Le récepteur doit effectuer les actions suivantes dans l'ordre.
- Vérifiez que
persist.adb.tradeinmode
est2
. - Vérifiez qu'aucune protection après rétablissement de la configuration d'usine ni aucun verrouillage antivol n'est activé.
- Provisionnez l'appareil, en vous assurant que
Settings.Secure.USER_SETUP_COMPLETE
etSettings.Global.DEVICE_PROVISIONED
sont1
. - Ignorez l'activité de l'assistant de configuration pour que l'appareil affiche l'écran d'accueil.
Référence sur le mode Trade In
Cette section explique toutes les commandes du mode échange.
évaluer
adb shell tradeinmode evaluate
Active le mode d'é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 ou des tests fonctionnels supplémentaires sur l'appareil.
Une fois que vous quittez le mode d'évaluation, une réinitialisation d'usine est effectuée pour vous assurer qu'aucun artefact des tests n'est transféré accidentellement à des clients.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Renvoie une chaîne JSON contenant des informations système, y compris des informations sur l'état de la batterie et de l'espace de stockage, pour l'appareil.
Incluez le paramètre --challenge
suivi d'une clé de défi 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 ou d'évaluation.
redémarrer
adb shell tradeinmode reboot
Redémarre l'appareil.
début des tests
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 contournée et seules les commandes en mode échange fonctionnent.
Cette commande ne fonctionne que sur les appareils avec des builds userdebug
, eng
ou user
. ro=debuggable=1
doit être défini pour la compilation user
.
État des tests
adb shell tradeinmode testing status
Indique si les tests du mode d'échange sont actifs.
Cette commande ne fonctionne que sur les appareils avec des builds userdebug
, eng
ou user
. ro=debuggable=1
doit être défini pour la compilation user
.
arrêt de test
adb shell tradeinmode testing stop
Renvoie l'appareil au mode dans lequel il se trouvait avant que vous n'exécutiez la commande adb shell tradeinmode testing start
.
Cette commande ne fonctionne que sur les appareils avec des builds userdebug
, eng
ou user
. ro=debuggable=1
doit être défini pour la compilation user
.
test 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 builds userdebug
, eng
ou user
. ro=debuggable=1
doit être défini pour la compilation user
.
wait-until-ready
adb shell tradeinmode wait-until-ready
Attend que les services système soient prêts pour que le mode échange puisse fonctionner pleinement. Utilisez cette commande dans votre automatisation pour vous assurer que les commandes en mode échange sont exécutées.
Vous pouvez ajouter wait-until-ready
avant d'autres commandes du mode échange. Par exemple, voici wait-until-ready
enchaîné à getstatus
:
adb shell tradeinmode wait-until-ready getstatus