Quando un dispositivo Android 16 (o versioni successive) viene avviato, viene messo in modalità permuta, che ti consente di connetterti al dispositivo utilizzando adb e di utilizzare un comando per ottenere informazioni sul dispositivo. Perché il dispositivo entri in modalità permuta, devono essere soddisfatte le seguenti condizioni preliminari:
- Devi ripristinare i dati di fabbrica del dispositivo.
- Il dispositivo non deve avere un servizio cellulare.
- Il dispositivo non deve avere connettività o un account configurato.
- Sul dispositivo deve essere in esecuzione una build non eseguibile in modalità di debug.
La modalità permuta ti consente di eseguire query sulle informazioni diagnostiche di base o di attivare la modalità di valutazione, che ti consente di eseguire una gamma completa di comandi adb ed eseguire diagnostiche aggiuntive sul dispositivo.
Raccogliere informazioni sanitarie generali
Per raccogliere informazioni generali sullo stato del tuo dispositivo, ad esempio informazioni su batteria, stato di archiviazione e numeri IMEI (International Mobile Equipment Identity), segui questi passaggi:
Assicurati che il dispositivo soddisfi i prerequisiti per la modalità permuta.
Collega il dispositivo a una workstation.
Dalla workstation, esegui questo comando:
adb shell tradeinmode getstatus
Questo comando restituisce un oggetto JSON con informazioni sul dispositivo. Di seguito è riportato un output di esempio di 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" }
Se
factory_reset_protection
è impostato sutrue
, il dispositivo è protetto e non può essere resettato. Se non è possibile resettare il dispositivo, non è possibile valutarlo.
Identificare lo stato del sistema operativo Android
Per raccogliere informazioni sullo stato del sistema operativo Android, ad esempio se si tratta di una build approvata, segui questi passaggi:
- Collega il dispositivo a una workstation.
- Assicurati che il dispositivo sia connesso a internet.
Dalla workstation, esegui questo comando:
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE è una stringa alfanumerica generata in modo casuale, ad esempio
p4tRsuHjWB
. Questo comando restituisce un file JSON che include un campo di attestazione contenente un record di attestazione base64.Questo comando aggiunge informazioni di attestazione alle informazioni restituite dal comando
getstatus
. Le informazioni sull'attestazione hanno il seguente aspetto:"attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw ... }
I dispositivi che vengono lanciati con Android 16 o versioni successive richiedono la connettività a internet per creare un record di attestazione. L'attestazione deve essere eseguita in modalità di valutazione, dopo aver configurato una connessione, in quanto non riesce se eseguita nella procedura guidata di configurazione.
Analizza le informazioni di attestazione utilizzando uno dei seguenti metodi:
- Utilizza lo strumento
parse_tim_attestation
creato durante la creazione di AOSP. - Utilizza una libreria di attestazione delle chiavi Android.
Ad esempio, per utilizzare lo strumento
parse_tim_attestation
, esegui:parse_tim_attestation --challenge CHALLENGE output_file
Il CHALLENGE deve essere la stessa sfida che hai utilizzato per ottenere le informazioni di attestazione.
Se hai salvato l'output del passaggio 2 in un output_file, puoi fornire il nome del file. In caso contrario, le informazioni di attestazione vengono lette da stdin.
Viene restituito un oggetto JSON con le informazioni sul sistema operativo Android:
"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"
Se
trustworthy
è uguale ayes
, il sistema operativo è considerato attendibile, la build è firmata e l'IMEI non è falsificato.Tieni presente che per eseguire l'attestazione è necessaria la connettività a internet sia sul dispositivo che sull'host.
- Utilizza lo strumento
Testare la modalità permuta
Durante lo sviluppo, devi testare il dispositivo per assicurarti che entri ed esca correttamente dalla modalità di permuta. Segui questi passaggi per testare la capacità del dispositivo di entrare e uscire dalla modalità di permuta:
Collega il dispositivo a una workstation.
Dalla workstation, riavvia il dispositivo in modalità permuta:
adb shell tradeinmode testing start
Il dispositivo viene riavviato e passa alla modalità permuta. Dopo aver attivato la modalità permuta, puoi utilizzare qualsiasi comando
adb shell tradein
.Assicurati che la modalità permuta sia attiva:
adb shell tradeinmode testing status
Il dispositivo rileva che il test della modalità permuta è attivo.
Esci dalla modalità permuta e ripristina l'accesso adb completo:
adb shell tradeinmode testing stop
Integrazione della configurazione guidata personalizzata
Il comando evaluate
non funziona sui dispositivi con procedure guidate di configurazione personalizzate
a meno che non venga aggiunto un ricevitore di trasmissione. Per aggiungere un ricevitore di trasmissione all'app
della procedura guidata di configurazione personalizzata:
Dichiara un ricevitore nel manifest delle app:
<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>
Crea un ricevitore di trasmissione simile a:
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. } }
Il destinatario deve eseguire le seguenti azioni in ordine.
- Verifica che
persist.adb.tradeinmode
sia2
. - Verifica che non siano presenti blocchi di protezione del ripristino dei dati di fabbrica o antifurto.
- Esegui il provisioning del dispositivo, assicurandoti che
Settings.Secure.USER_SETUP_COMPLETE
eSettings.Global.DEVICE_PROVISIONED
siano1
. - Chiudi l'attività della procedura guidata di configurazione in modo che il dispositivo si trovi nella schermata Home.
Riferimento alla modalità permuta
Questa sezione spiega tutti i comandi della modalità permuta.
evaluate
adb shell tradeinmode evaluate
Entra in modalità di valutazione saltando la configurazione guidata come se ogni schermata di configurazione fosse stata saltata manualmente dall'utente.
Dopo aver saltato la procedura guidata di configurazione, puoi eseguire comandi ADB aggiuntivi o test funzionali sul dispositivo.
Dopo aver abbandonato la modalità di valutazione, viene eseguito un ripristino dei dati di fabbrica per garantire che nessun artefatto dei test venga trasferito accidentalmente ai clienti.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Restituisce una stringa JSON con le informazioni di sistema, incluse quelle sullo stato della batteria e dello spazio di archiviazione, per il dispositivo.
Includi il parametro --challenge
seguito da una chiave di verifica alfanumerica
generata in modo casuale per restituire un campo di attestazione aggiuntivo. Analizza
questa risposta per identificare le informazioni chiave del sistema operativo, ad esempio
lo stato del bootloader (bloccato o sbloccato) e la validità dei
numeri di serie IMEI.
poweroff
adb shell tradeinmode poweroff
Spegne il dispositivo. Utilizza questo comando per evitare il consumo della batteria mentre il dispositivo non viene testato o valutato attivamente.
fai ripartire
adb shell tradeinmode reboot
Riavvia il dispositivo.
inizio del test
adb shell tradeinmode testing start
Riavvia il dispositivo in modalità permuta. Questo comando funziona solo all'interno della procedura guidata di configurazione. Dopo aver eseguito questo comando, l'autorizzazione viene ignorata e funzionano solo i comandi della modalità permuta.
Questo comando funziona solo sui dispositivi con build userdebug
, eng
o user
. La build user
deve avere ro=debuggable=1
impostato.
stato del test
adb shell tradeinmode testing status
Indica se il test della modalità permuta è attivo.
Questo comando funziona solo sui dispositivi con build userdebug
, eng
o user
. La build user
deve avere ro=debuggable=1
impostato.
testing stop
adb shell tradeinmode testing stop
Riporta il dispositivo alla modalità in cui si trovava prima dell'esecuzione del comando
adb shell tradeinmode testing start
.
Questo comando funziona solo sui dispositivi con build userdebug
, eng
o user
. La build user
deve avere ro=debuggable=1
impostato.
testing wipe
adb shell tradeinmode testing wipe
Ripristina i dati di fabbrica del dispositivo.
Questo comando funziona solo sui dispositivi con build userdebug
, eng
o user
. La build user
deve avere ro=debuggable=1
impostato.
wait-until-ready
adb shell tradeinmode wait-until-ready
Attende che i servizi di sistema siano pronti in modo che la modalità permuta possa funzionare completamente. Utilizza questo comando all'interno dell'automazione per assicurarti che i comandi della modalità permuta vengano eseguiti correttamente.
Puoi aggiungere wait-until-ready
prima di altri comandi della modalità permuta. Ad
esempio, ecco wait-until-ready
concatenato a getstatus
:
adb shell tradeinmode wait-until-ready getstatus