Quando un dispositivo Android 16 (o versioni successive) si avvia, viene messo in modalità permuta, che ti consente di connetterti al dispositivo utilizzando adb e di utilizzare un comando per ottenere informazioni sul dispositivo. Affinché il dispositivo entri in modalità permuta, devono essere soddisfatti i seguenti prerequisiti:
- È necessario ripristinare i dati di fabbrica del dispositivo.
- Il dispositivo non deve avere un servizio di telefonia cellulare.
- Il dispositivo non deve avere connettività o un account.
- Sul dispositivo deve essere in esecuzione una build non debbugabile.
Dopo aver eseguito la configurazione guidata, il dispositivo viene inserito in modalità di valutazione, che ti consente di eseguire una gamma completa di comandi adb ed eseguire diagnostica aggiuntiva sul dispositivo.
Raccogliere informazioni sanitarie generali
Per raccogliere informazioni generali sullo stato del tuo dispositivo, ad esempio informazioni sulla batteria, sullo stato dello spazio di archiviazione e sui 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 il seguente comando:
adb shell tradeinmode getstatus
Questo comando restituisce un oggetto JSON con informazioni sul dispositivo. Di seguito è riportato un esempio di output 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 abbia una connessione a internet.
Dalla workstation, esegui il seguente comando:
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE è una stringa alfanumerica generata in modo casuale, ad esempio
p4tRsuHjWB
. Questo comando restituisce un file JSON contenente 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 lanciati con Android 16 o versioni successive richiedono una connessione a internet per creare un record di attestazione. L'attestazione deve essere eseguita in modalità di valutazione, dopo aver configurato una connessione, poiché non va a buon fine se eseguita nella configurazione guidata.
Analizza le informazioni di attestazione utilizzando uno dei seguenti metodi:
- Utilizza lo strumento
parse_tim_attestation
creato durante la compilazione 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
CHALLENGE deve essere la stessa verifica che hai utilizzato per ottenere le informazioni sull'attestazione.
Se hai salvato l'output del passaggio 2 in un file output_file, puoi fornire il nome 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 è contraffatto.Tieni presente che per eseguire l'attestazione è necessaria la connettività a internet, sia sul dispositivo sia sull'host.
- Utilizza lo strumento
Testare la modalità permuta
Durante lo sviluppo, devi testare il dispositivo per assicurarti che acceda ed esca correttamente dalla modalità permuta. Segui questi passaggi per verificare la capacità del dispositivo di entrare ed uscire dalla modalità permuta:
Collega il dispositivo a una workstation.
Dalla workstation, riavvia il dispositivo in modalità permuta:
adb shell tradeinmode testing start
Il dispositivo viene riavviato ed entra in 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 identifica che i test della modalità permuta sono attivi.
Esci dalla modalità permuta e ripristina l'accesso completo ad adb:
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'app di ricezione di annunci all'app wizard di configurazione personalizzata:
Dichiara un ricevitore nel file manifest dell'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'entità BroadcastReceiver 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 protezioni di ripristino dei dati di fabbrica o serrature antifurto.
- Esegui il provisioning del dispositivo, assicurandoti che
Settings.Secure.USER_SETUP_COMPLETE
eSettings.Global.DEVICE_PROVISIONED
siano1
. - Escludi l'attività della procedura guidata di configurazione in modo che il dispositivo sia nella schermata Home.
Riferimento alla modalità permuta
Questa sezione spiega tutti i comandi in modalità permuta.
valutare
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 di funzionalità sul dispositivo.
Quando esci dalla modalità di valutazione, viene eseguito un ripristino dei dati di fabbrica per assicurarti che nessun elemento del test venga trasferito accidentalmente ai clienti.
getstatus
adb shell tradeinmode getstatus [--challenge CHALLENGE]
Restituisce una stringa JSON con le informazioni di sistema, incluse le informazioni 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 quando il dispositivo non è in fase di test o valutazione attiva.
fai ripartire
adb shell tradeinmode reboot
Riavvia il dispositivo.
inizio 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 emesso 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 compilazione user
deve avere ro=debuggable=1
impostato.
stato del test
adb shell tradeinmode testing status
Indica se i test della modalità permuta sono attivi.
Questo comando funziona solo sui dispositivi con build userdebug
, eng
o user
. La compilazione user
deve avere ro=debuggable=1
impostato.
fermata di prova
adb shell tradeinmode testing stop
Ripristina il dispositivo nella modalità in cui si trovava prima di emettere il comandoadb shell tradeinmode testing start
.
Questo comando funziona solo sui dispositivi con build userdebug
, eng
o user
. La compilazione user
deve avere ro=debuggable=1
impostato.
test 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 compilazione user
deve avere ro=debuggable=1
impostato.
wait-until-ready
adb shell tradeinmode wait-until-ready
Attende che i servizi di sistema siano pronti per consentire il funzionamento completo della modalità permuta. 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
agganciato a getstatus
:
adb shell tradeinmode wait-until-ready getstatus