Connettere lo smartphone al pc via adb
Foto di Pixabay: Pexels.com
Android Debug Bridge, adb, permette di connettere device ad un pc. Oltre che consentire l'accesso all'intero file system del device invece che della sola parte multimediale, mette a disposizione un set di comandi per la manipolazione di:
- rete
- installazione app
- filesystem
- scripting
- debugging
Do per scontata la presenza degli android tools e la conoscenza di come si attivi la modalità sviluppatore per accedere alla parte di debugging.
Modalità di connessione
Posso collegare il device all'host in 3 modi: usb, tcpip, wireless (da android 11 in poi).
Probabilmente la modalità usb è quella più sicura trattandosi di un collegamento fisico, ma il wireless, per me, è una gran comodità.
USB
Giusto per dovere di cronaca. Chiunque possegga un telefono android, credo l'abbia fatto almeno una volta.
- Collegare il telefono alla porta usb del pc.
- Abilitare il Debug Usb dalle opzioni sviluppatore.
- Autorizzare l'host sul device.
Come avviene l'autorizzazione
L'autorizzazione dell'host consiste in un'autenticazione con chiave pubblica.
Sull'host, in ~/.android
(almeno sui sistemi *nix) è presente:
- una coppia di chiavi pubblica e privata
- il file adb_known_hosts.pb.
Quando si avvia il server adb sull'host per la prima volta, viene generata una coppia di chiavi. La chiave pubblica dell'host viene inviata al device durante la prima connessione, ed è quella che deve essere accettata dal device affinché sia possibile accedervi via adb. Quando si effettua una “revoca delle autorizzazioni” sul device, si cancellano le chiavi pubbliche che devono essere riaccettate se avviene una nuova connessione.
Il file adb_known_hosts.pb contiene gli identificativi dei device connessi all'host via adb.
Se si vuole rigenerare la coppia di chiavi per ruotarle, si può ricorrere al seguente comando:
adb keygen adbkey
che produce una chiave privata rsa-2048 e la corrispondente chiave pubblica.
Le chiavi così generate andranno posizionate in ~/.android
e il daemon adb andrà riavviato.
adb kill-server
adb start-server
TCPIP
L'abilitazione della modalità tcpip richiede il preventivo collegamento fisico all'host in modalità usb. Una volta abilitata, questa rimarrà la modalità di collegamento predefinita finché il daemon sarà attivo.
- Collegare il device in modalità debug usb (vedi USB).
adb tcpip <port>
per abilitare la modalità tcpip su una porta. Verrà avviato un altro daemon in ascolto sulla porta .- recuperare l'ip del device sulla nostra rete locale (normalmente disponibile su Info telefono / Info stato).
adb connect <ip>:<port>
.- Staccare il device dalla porta usb. Per le successive operazioni di connessione | disconnessione basta il solito:
adb connect | disconnect <ip>:<port>
, connette | disconnette il device.
Wi-Fi
A differenza della modalità tcpip, non richiede un collegamento fisico all'host perché il pairing viene fatto sia sulla rete a cui ci si assesta, sia sull'host attraverso un PIN. Inoltre ogni connessione avviene su una porta randomica.
- La prima volta:
- abilitare Debug wireless da Opzioni per sviluppatori.
- Confermare il pairing alla rete.
- Andare su Debug wireless, accoppiare un nuovo dispositivo e prendere nota dell'ip, della porta e del PIN.
- Sull'host
adb pair <ip>:<port>
, per associare il device all'host attraverso il PIN segnato in precedenza.
- Ad ogni connessione:
adb connect | disconnect <ip>:<port>
per connettere | disconnettere il device.
Una volta che l'host è autorizzato, basterà effettuare una connect alla porta opportuna anche se il server venisse riavviato.
Usare ADB su un host con dispositivi multipli connessi
Quando più device sono connessi ad un host, per lanciare un comando, dobbiamo sapere come selezionare il device corretto via adb.
Ci vengono in aiuto due flag, “-s” e “-t”, che selezionano il device rispettivamente in base al seriale o al “transport id”, informazione che ottengo con adb devices
.
Faccio l'esempio di 3 device, due connessi via usb e uno connesso via wireless (da Android 11 in poi) su cui vogliamo aprire una shell.
adb devices
List of devices attached
141***** device
52004************ device
<ip>:<porta> device
Per avere l'info sul transport id è necessaria la modalità “verbose”
adb devices -l
List of devices attached
141***** device usb:1-3 product:<serial_product_1> model:<model_name_1> device:<device_name_1> transport_id:10
52004************ device usb:1-2 product:<serial_product_2> model:<model_name_2> device:<device_name_2> transport_id:8
<ip>:<porta> device product:<serial_product_3> model:<model_name_3> device:<device_name_3> transport_id:11
da cui:
adb -s 141***** shell
o adb -t 10 shell
, per aprire una shell sul primo device.
adb -s 52004************ shell
o adb -t 8 shell
, per aprire una shell sul secondo device.
adb -s <ip>:<porta> shell
o adb -t 11 shell
, per aprire una shell sul terzo device.
Riferimenti: