Wenn ein Gerät mit Android 16 oder höher hochfährt, wird es in den Inzahlungnahmemodus versetzt. In diesem Modus können Sie eine Verbindung zum Gerät über adb herstellen und mit einem Befehl Informationen zum Gerät abrufen. Die folgenden Voraussetzungen müssen erfüllt sein, damit das Gerät in den Trade-In-Modus wechselt:
- Das Gerät muss auf die Werkseinstellungen zurückgesetzt werden.
- Das Gerät darf keinen Mobilfunkdienst haben.
- Das Gerät darf keine Verbindung oder kein Konto haben.
- Auf dem Gerät muss ein nicht debugfähiger Build ausgeführt werden.
Im Trade-In-Modus können Sie grundlegende Diagnoseinformationen abrufen oder den Bewertungsmodus aufrufen, in dem Sie eine Vielzahl von ADB-Befehlen ausführen und zusätzliche Diagnosen auf dem Gerät durchführen können.
Allgemeine Gesundheitsinformationen erfassen
So rufen Sie allgemeine Gesundheitsinformationen für Ihr Gerät auf, z. B. Informationen zum Akku, zum Speicher und zur IMEI-Nummer (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 ein Beispiel für die Ausgabe eines 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 sicher und kann nicht zurückgesetzt werden. Wenn das Gerät nicht zurückgesetzt werden kann, kann es nicht bewertet werden.
Android-Betriebssystemstatus 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.
- Prüfen Sie, ob das Gerät mit dem Internet verbunden ist.
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 zurück, einschließlich eines Attestierungsfelds mit einem Base64-Attestierungsdatensatz.Mit diesem Befehl werden den Informationen, die vom Befehl
getstatus
zurückgegeben werden, Attestinformationen angehängt. Die Bestätigungsinformationen 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 Attestdatensatz zu erstellen. Die Attestierung sollte im Bewertungsmodus nach dem Konfigurieren einer Verbindung erfolgen, da sie im Einrichtungsassistenten fehlschlägt.
Parsen Sie die Attestinformationen mit einer der folgenden Methoden:
- Verwenden Sie das
parse_tim_attestation
-Tool, das beim Erstellen von AOSP erstellt wird. - Verwenden Sie eine Android Key Attestation Library.
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 dieselbe Challenge sein, die Sie zum Abrufen der Attestinformationen verwendet haben.
Wenn Sie die Ausgabe von Schritt 2 in einer output_file gespeichert haben, können Sie diesen Dateinamen angeben. Andernfalls werden die Attestinformationen 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
gleichyes
ist, gilt das Betriebssystem als vertrauenswürdig. Der Build ist signiert und die IMEI ist nicht gefälscht.Für die Attestierung ist eine Internetverbindung sowohl auf dem Gerät als auch auf dem Host erforderlich.
- Verwenden Sie das
Trade-In-Modus testen
Während der Entwicklung sollten Sie Ihr Gerät testen, um sicherzustellen, dass es ordnungsgemäß in den Trade-In-Modus wechselt und diesen wieder verlässt. So testen Sie, ob Ihr Gerät in den Trade-In-Modus wechseln und diesen wieder verlassen kann:
Schließen Sie das Gerät an eine Workstation an.
Starten Sie das Gerät über die 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 Inzahlungnahmemodus aufgerufen haben, können Sie einen beliebigen
adb shell tradein
-Befehl verwenden.Prüfen Sie, ob der Inzahlungnahmemodus aktiv ist:
adb shell tradeinmode testing status
Das Gerät erkennt, dass der Testmodus für die Inzahlungnahme aktiv ist.
So beenden Sie den Trade-In-Modus und stellen den vollständigen ADB-Zugriff wieder her:
adb shell tradeinmode testing stop
Integration eines benutzerdefinierten Einrichtungsassistenten
Der Befehl evaluate
funktioniert auf Geräten mit benutzerdefinierten Einrichtungsassistenten nur, wenn ein Broadcast-Receiver hinzugefügt wird. So fügen Sie der benutzerdefinierten Einrichtungsassistenten-App einen Broadcast-Empfänger hinzu:
Deklariere einen Empfänger im App-Manifest:
<receiver android:name=".EnterEvaluationModeReceiver" android:exported="true" android:permission="android.permis>sio<n.ENTER_TRADE>_IN_M<ODE" intent-filter action android:name="com.google.android>.setu<pwizard.ENTER_TRADE_IN_MODE" / category android:>nam<e="androi>d<.intent.c>a
tegory.DEFAULT" / /intent-filter /receiverErstellen Sie einen Broadcast-Empfänger ähnlich dem folgenden:
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 activ
ity. } }
Der Empfänger muss die folgenden Aktionen in der angegebenen Reihenfolge ausführen.
- Prüfen Sie, ob
persist.adb.tradeinmode
2
ist. - Prüfen Sie, ob der Schutz vor Zurücksetzen auf die Werkseinstellungen oder Diebstahlschutzsperren vorhanden 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 den Einrichtungsassistenten, damit das Gerät auf dem Startbildschirm angezeigt wird.
Trade-In-Modus
In diesem Abschnitt werden alle Befehle für den Inzahlungnahmemodus erläutert.
bewerten
adb shell tradeinmode evaluate
Wechselt in den Auswertungsmodus, indem der Einrichtungsassistent übersprungen wird, als ob jeder Einrichtungsbildschirm manuell vom Nutzer übersprungen wurde.
Nachdem Sie den Einrichtungsassistenten übersprungen haben, können Sie zusätzliche ADB-Befehle ausführen oder Funktionstests auf dem Gerät durchführen.
Nachdem Sie den Evaluierungsmodus verlassen haben, wird das Gerät auf die Werkseinstellungen zurückgesetzt, damit keine Artefakte aus dem Test versehentlich an Kunden weitergegeben 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 zum Speicher.
Fügen Sie den Parameter --challenge
gefolgt von einem zufällig generierten alphanumerischen Challenge-Schlüssel ein, um ein zusätzliches Attestierungsfeld zurückzugeben. Analysieren Sie diese Antwort, um wichtige Betriebssysteminformationen 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, wenn das Gerät nicht aktiv getestet oder bewertet wird.
neu starten
adb shell tradeinmode reboot
Startet das Gerät neu.
Testbeginn
adb shell tradeinmode testing start
Das Gerät wird im Trade-In-Modus neu gestartet. Dieser Befehl funktioniert nur im Einrichtungsassistenten. Wenn Sie diesen Befehl ausführen, wird die Autorisierung umgangen und es funktionieren nur Befehle im Eintauschmodus.
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 Testmodus für die Inzahlungnahme 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.
Test beenden
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
gegeben 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.
Testlauf
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 Inzahlungnahmemodus vollständig funktioniert. Verwenden Sie diesen Befehl in Ihrer Automatisierung, um sicherzustellen, dass die Befehle für den Inzahlungnahmemodus erfolgreich ausgeführt werden.
Sie können wait-until-ready
vor anderen Befehlen für den Trade-In-Modus hinzufügen. Hier sehen Sie ein Beispiel für die Verkettung von wait-until-ready
und getstatus
:
adb shell tradeinmode wait-until-ready getstatus