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

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

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

  3. 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 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 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:

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

  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:

    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.

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:

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

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

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

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

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

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