Informationen zum Systemzustand abrufen

Wenn ein Gerät mit Android 16 (oder höher) gestartet wird, wird es in den Trade-In-Modus versetzt. So können Sie über adb eine Verbindung zum Gerät herstellen und mit einem Befehl Informationen zum Gerät abrufen. Damit das Gerät in den Trade-In-Modus wechseln kann, müssen die folgenden Voraussetzungen erfüllt sein:

  • Das Gerät muss auf die Werkseinstellungen zurückgesetzt werden.
  • Das Gerät darf keinen Mobilfunkdienst haben.
  • Das Gerät darf keine Verbindung haben und es darf kein Konto eingerichtet sein.
  • Auf dem Gerät muss ein nicht debugbarer Build ausgeführt werden.

Nachdem Sie den Einrichtungsassistenten durchlaufen haben, wird das Gerät in den Bewertungsmodus versetzt. Dadurch können Sie alle adb-Befehle ausführen und zusätzliche Diagnosen auf dem Gerät durchführen.

Allgemeine Gesundheitsinformationen erheben

So rufen Sie allgemeine Informationen zur Gerätegesundheit ab, z. B. zum Akku, zum Zustand des Speichers und zur IMEI (International Mobile Equipment Identity):

  1. Prüfen Sie, ob Ihr Gerät die Voraussetzungen für den Trade-In-Modus erfüllt.

  2. Schließen Sie das Gerät an eine Workstation an.

  3. Führen Sie auf der Workstation den folgenden Befehl aus:

    adb shell tradeinmode getstatus

    Dieser Befehl gibt ein JSON-Objekt mit Informationen zum Gerät zurück. Hier eine Beispielausgabe von 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"
    }
    

    Wenn factory_reset_protection auf true gesetzt ist, ist das Gerät geschützt und kann nicht zurückgesetzt werden. Wenn das Gerät nicht zurückgesetzt werden kann, kann es nicht geprüft werden.

Status des Android-Betriebssystems ermitteln

So rufen Sie Informationen zum Status des Android-Betriebssystems ab, z. B. ob es sich um einen genehmigten Build handelt:

  1. Schließen Sie das Gerät an eine Workstation an.
  2. Das Gerät muss mit dem Internet verbunden sein.
  3. Führen Sie auf der Workstation den folgenden Befehl aus:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE ist ein zufällig generierter alphanumerischer String, z. B. p4tRsuHjWB. Dieser Befehl gibt JSON mit einem Attestierungsfeld zurück, das einen Base64-Attestierungsdatensatz enthält.

    Mit diesem Befehl werden den vom Befehl getstatus zurückgegebenen Informationen Attestierungsinformationen angehängt. Die Attestierungsinformationen sehen so aus:

    "attestation": {
      "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n
        EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n
        MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n
        KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw
        ...
    }
    

    Für Geräte, die mit Android 16 oder höher auf den Markt gebracht werden, ist eine Internetverbindung erforderlich, um einen Attestierungsdatensatz zu erstellen. Die Attestierung sollte im Bewertungsmodus nach der Konfiguration einer Verbindung durchgeführt werden, da sie im Einrichtungsassistenten fehlschlägt.

  4. Parsen Sie die Attestierungsinformationen mit einer der folgenden Methoden:

    Wenn Sie beispielsweise das parse_tim_attestation-Tool verwenden möchten, führen Sie Folgendes aus:

    parse_tim_attestation --challenge CHALLENGE output_file

    Die CHALLENGE muss mit der Herausforderung übereinstimmen, mit der Sie die Attestierungsinformationen abgerufen haben.

    Wenn Sie die Ausgabe von Schritt 2 in einer output_file gespeichert haben, können Sie diesen Dateinamen angeben. Andernfalls werden die Attestierungsinformationen aus stdin gelesen.

    Es wird ein JSON-Objekt mit den Informationen zum Android-Betriebssystem zurückgegeben:

    "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"
    

    Wenn trustworthy mit yes übereinstimmt, wird das Betriebssystem als vertrauenswürdig eingestuft. Der Build ist signiert und die IMEI ist nicht gefälscht.

    Für die Attestierung ist eine Internetverbindung erforderlich, sowohl auf dem Gerät als auch auf dem Host.

Trade-In-Modus testen

Während der Entwicklung sollten Sie Ihr Gerät testen, um sicherzustellen, dass es den Trade-In-Modus ordnungsgemäß betritt und verlässt. So testen Sie, ob Ihr Gerät den Trade-In-Modus aktivieren und wieder beenden kann:

  1. Schließen Sie das Gerät an eine Workstation an.

  2. Starten Sie das Gerät auf der Workstation im Trade-In-Modus neu:

    adb shell tradeinmode testing start

    Das Gerät wird neu gestartet und wechselt in den Trade-In-Modus. Nachdem Sie den Trade-In-Modus aktiviert haben, können Sie jeden adb shell tradein-Befehl verwenden.

  3. Prüfen, ob der Trade-In-Modus aktiv ist:

    adb shell tradeinmode testing status

    Das Gerät erkennt, dass der Test des Trade-In-Modus aktiv ist.

  4. Trade-In-Modus beenden und vollständigen ADB-Zugriff wiederherstellen:

    adb shell tradeinmode testing stop

Integration des benutzerdefinierten Einrichtungsassistenten

Der Befehl evaluate funktioniert auf Geräten mit benutzerdefinierten Einrichtungsassistenten nur, wenn ein Broadcast-Empfänger hinzugefügt wird. So fügen Sie der App für den benutzerdefinierten Einrichtungsassistenten einen Broadcast-Empfänger hinzu:

  1. Deklarieren Sie einen Empfänger im App-Manifest:

    <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. Erstellen Sie einen Broadcast-Empfänger ähnlich dem folgenden Beispiel:

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

Der Empfänger muss die folgenden Aktionen in der richtigen Reihenfolge ausführen.

  1. Prüfen Sie, ob persist.adb.tradeinmode 2 ist.
  2. Prüfen Sie, ob der Schutz vor Zurücksetzen oder Diebstahlsperren aktiviert sind.
  3. Stellen Sie das Gerät bereit und achten Sie darauf, dass Settings.Secure.USER_SETUP_COMPLETE und Settings.Global.DEVICE_PROVISIONED 1 sind.
  4. Schließen Sie die Aktivität des Einrichtungsassistenten, damit das Gerät den Startbildschirm anzeigt.

Trade-In-Modus

In diesem Abschnitt werden alle Befehle für den Trade-In-Modus erläutert.

bewerten

adb shell tradeinmode evaluate

Der Bewertungsmodus wird durch Überspringen des Einrichtungsassistenten aktiviert, als wäre jeder Einrichtungsbildschirm manuell vom Nutzer übersprungen worden.

Nachdem Sie den Einrichtungsassistenten übersprungen haben, können Sie zusätzliche ADB-Befehle oder Funktionstests auf dem Gerät ausführen.

Nachdem Sie den Bewertungsmodus verlassen haben, wird das Gerät auf die Werkseinstellungen zurückgesetzt, damit keine Artefakte aus dem Test versehentlich an Kunden übertragen werden.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Gibt einen JSON-String mit Systeminformationen für das Gerät zurück, einschließlich Informationen zum Akku- und Speicherzustand.

Fügen Sie den Parameter --challenge gefolgt von einem zufällig generierten alphanumerischen Bestätigungsschlüssel ein, um ein zusätzliches Attestierungsfeld zurückzugeben. Parse diese Antwort, um wichtige Informationen zum Betriebssystem zu ermitteln, z. B. den Status des Bootloaders (gesperrt oder entsperrt) und die Gültigkeit der IMEI-Seriennummern.

poweroff

adb shell tradeinmode poweroff

Schaltet das Gerät aus. Mit diesem Befehl können Sie verhindern, dass der Akku entladen wird, während das Gerät nicht aktiv getestet oder bewertet wird.

neu starten

adb shell tradeinmode reboot

Das Gerät wird neu gestartet.

Testbeginn

adb shell tradeinmode testing start

Das Gerät wird im Trade-In-Modus neu gestartet. Dieser Befehl funktioniert nur im Einrichtungsassistenten. Wenn dieser Befehl ausgegeben wird, wird die Autorisierung umgangen und es funktionieren nur Befehle für den Trade-In-Modus.

Dieser Befehl funktioniert nur auf Geräten mit userdebug-, eng- oder user-Builds. Für den user-Build muss ro=debuggable=1 festgelegt sein.

Teststatus

adb shell tradeinmode testing status

Gibt an, ob der Test des Trade-In-Modus aktiv ist.

Dieser Befehl funktioniert nur auf Geräten mit userdebug-, eng- oder user-Builds. Für den user-Build muss ro=debuggable=1 festgelegt sein.

Teststopp

adb shell tradeinmode testing stop

Das Gerät wird in den Modus zurückversetzt, in dem es sich befand, bevor Sie den Befehl adb shell tradeinmode testing start eingegeben haben.

Dieser Befehl funktioniert nur auf Geräten mit userdebug-, eng- oder user-Builds. Für den user-Build muss ro=debuggable=1 festgelegt sein.

Test löschen

adb shell tradeinmode testing wipe

Das Gerät wird auf die Werkseinstellungen zurückgesetzt.

Dieser Befehl funktioniert nur auf Geräten mit userdebug-, eng- oder user-Builds. Für den user-Build muss ro=debuggable=1 festgelegt sein.

wait-until-ready

adb shell tradeinmode wait-until-ready

Wartet, bis die Systemdienste bereit sind, damit der Trade-In-Modus vollständig funktioniert. Verwenden Sie diesen Befehl in Ihrer Automatisierung, um sicherzustellen, dass Befehle im Trade-In-Modus erfolgreich sind.

Sie können wait-until-ready vor andere Befehle für den Trade-In-Modus einfügen. Hier ist beispielsweise wait-until-ready an getstatus angehängt:

adb shell tradeinmode wait-until-ready getstatus