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):
Prüfen Sie, ob Ihr Gerät die Voraussetzungen für den Trade-In-Modus erfüllt.
Schließen Sie das Gerät an eine Workstation an.
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
auftrue
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:
- Schließen Sie das Gerät an eine Workstation an.
- Das Gerät muss mit dem Internet verbunden sein.
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.
Parsen Sie die Attestierungsinformationen mit einer der folgenden Methoden:
- Verwenden Sie das
parse_tim_attestation
-Tool, das beim Erstellen von AOSP erstellt wird. - Verwenden Sie eine Android-Schlüsselattestierungsbibliothek.
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
mityes
ü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.
- Verwenden Sie das
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:
Schließen Sie das Gerät an eine Workstation an.
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.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.
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:
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>
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.
- Prüfen Sie, ob
persist.adb.tradeinmode
2
ist. - Prüfen Sie, ob der Schutz vor Zurücksetzen oder Diebstahlsperren aktiviert sind.
- Stellen Sie das Gerät bereit und achten Sie darauf, dass
Settings.Secure.USER_SETUP_COMPLETE
undSettings.Global.DEVICE_PROVISIONED
1
sind. - 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