Obtenir des informations sur l'état du système

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 :

  1. Assurez-vous que votre appareil remplit les conditions préalables pour le mode Échange.

  2. Branchez l'appareil à un poste de travail.

  3. 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 sur true, 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 :

  1. Branchez l'appareil à un poste de travail.
  2. Assurez-vous que l'appareil est connecté à Internet.
  3. 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.

  4. Analysez les informations d'attestation à l'aide de l'une des méthodes suivantes :

    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.

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 :

  1. Branchez l'appareil à un poste de travail.

  2. 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.

  3. Assurez-vous que le mode Échange est activé :

    adb shell tradeinmode testing status

    L'appareil identifie que le test du mode Échange est actif.

  4. 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é :

  1. Déclarez un récepteur 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>
    
  2. Cré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 activity.
     }
    }
    

Le destinataire doit effectuer les actions suivantes dans l'ordre.

  1. Vérifiez que persist.adb.tradeinmode est 2.
  2. Vérifiez qu'il n'y a pas de protection après rétablissement de la configuration d'usine ni de verrouillage antivol.
  3. Provisionnez l'appareil en vous assurant que Settings.Secure.USER_SETUP_COMPLETE et Settings.Global.DEVICE_PROVISIONED sont définis sur 1.
  4. 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