37 votos

¿Cómo consigo que mi dispositivo sea detectado por ADB en Linux?

Acabo de recibir mi nuevo y brillante Wileyfox Swift - y antes de ponerlo en práctica quiero oem unlock y Root (como suelo hacer con los nuevos dispositivos ;) El problema es, sin embargo usb-debugging está activado en el dispositivo, y una línea correspondiente en /etc/udev/rules.d/51-android.rules existe, el dispositivo no es visto por adb devices .

Sé que hay varias respuestas dispersas en este sitio, pero son difíciles de encontrar, sólo cubren un dispositivo específico, o no cubren todos los pasos que finalmente necesitaba. Así que aprovecho esta oportunidad para hacer una pregunta canónica e independiente del dispositivo y darle una respuesta detallada a continuación:

¿Cómo puedo hacer que mi dispositivo Android sea visto y utilizado por adb en Linux?

0 votos

Siempre estoy abierto a las críticas, pero un voto negativo sin explicación es difícil de interpretar. Así que, ¿podría el autor del voto negativo explicar qué debería mejorarse en la pregunta? Prometo no abusar de mis poderes de mod para castigar :)

3 votos

Supongo que el votante no se dio cuenta de que publicaste la pregunta para autoresponderte (no debió fijarse en ti en la respuesta). Dado que no hay ninguna pista en la pregunta o en los comentarios de que se publicó con el propósito de auto-respuesta el votante podría haber objetado al penúltimo párrafo (muestra la pereza, si se lee en el contexto de cualquier usuario normal y su pregunta). Por ahora no se me ocurre ninguna otra razón.

1 votos

@Firelord me parece convincente (he editado un poco la pregunta para evitar pasos en falso adicionales). Pero entonces, ese usuario debería haber upvoted la respuesta. ¿O también me he perdido algo? ;)

49voto

Izzy Puntos 45544

Habilitar la depuración USB en el dispositivo

Esto se hace en Ajustes ' Desarrollo . Si no tiene esa entrada en su menú de configuración, vaya a Configuración ' Acerca de , desplázate hasta el "Número de compilación", y martillea como un mono hasta que tu dispositivo te felicite por haberte convertido en desarrollador. Vuelve a la página principal del Ajustes y cerca de la parte inferior debería ver la configuración de "Desarrollo" (o "Desarrolladores") ahora. Entra en ella, y activa Depuración USB aquí.

Identificar el dispositivo

Primero necesitamos saber cómo se identifica el dispositivo en el bus USB. Para ello, con el dispositivo Android NO conectado, coge un shell y ejecuta el comando lsusb . A continuación, conecte el dispositivo y ejecute de nuevo el comando. Observa la nueva línea. Para el Wileyfox Swift se trata de un "dispositivo sin nombre":

Bus 004 Device 003: ID 2970:2282

Establecimiento de las normas para el ADB

Ahora necesitamos los números al final de la línea anterior: 2970:2282 . En ellos se especifica el proveedor (2970) y el propio dispositivo (2282). Teniendo esos datos, necesitamos un root en nuestra máquina Linux para editar (o crear, si aún no existe) el /etc/udev/rules.d/51-android.rules archivo. Allí, añada una línea para su dispositivo. La siguiente línea de ejemplo muestra cómo se ve para el Wileyfox Swift:¹

SUBSYSTEMS=="usb", ATTRS{idVendor}=="2970", ATTRS{idProduct}=="2282", MODE="0666" GROUP="androiddev", SYMLINK+="android%n"

Si tiene un dispositivo diferente, sustituya los ID de proveedor y de producto por los que ha encontrado anteriormente al ejecutar lsusb . Una breve explicación de la línea:

  • SUBSYSTEMS=="usb" : obviamente esta regla es sólo para USB ;)
  • ATTRS{idVendor}=="2970" : el ID de proveedor del dispositivo para el que se aplica esta regla
  • ATTRS{idProduct}=="2282" : el ID del dispositivo
  • MODE="0666" : permisos que obtendrá el nodo del dispositivo. 0666 es bastante laxo, ya que da a todos los usuarios del sistema permisos de lectura y escritura, así que si le preocupa, puede intentar sustituirlo por un 0660 (dando sólo lectura-escritura al propietario y al grupo, y negando todo a los demás).
  • GROUP="androiddev" : a qué grupo debe pertenecer el nodo del dispositivo. Debe ser un grupo al que pertenezcan los usuarios que vayan a trabajar con el dispositivo.
  • SYMLINK+="android%n" : sólo para dar un nombre bonito al nodo, para poder encontrarlo más fácilmente en /dev (en mi caso, luego apareció allí como /dev/android5 )

Esa norma entró en /etc/udev/rules.d/51-android.rules Debemos decir udev para hacer uso de ella. La forma más segura (junto a un reinicio ;) es reiniciar el udev servicio. Dependiendo de su distribución de Linux, esto se puede hacer a través de service udev restart o /etc/init.d/udev restart .

Hecho esto, deja la cáscara de root. Desconecte y vuelva a conectar su dispositivo Android, intente adb devices de nuevo. La mayoría de los dispositivos aparecieron ahora, pero no el Wileyfox Swift - que obviamente quiere algunos mimos extra. Si te encuentras en esa situación, abre (o crea si no existe) el archivo ~/.android/adb_usb.ini y añada una sola línea, nombrando al proveedor que ha encontrado con lsusb arriba; para el Swift que sería 0x2970 (yupp, aquí hay que ponerle el prefijo 0x para señalar que es un número hexadecimal). A continuación, reinicie el servidor ADB: adb kill-server && adb start-server . Desconecte y vuelva a conectar el dispositivo. Ahora adb devices debería verlo.

Conectar el dispositivo

Puede que te hayas dado cuenta de que adb devices te dijo algo así como 0123456789ABCDEF unauthorized . Eso está bien y para su seguridad (de los dispositivos): su ordenador debe estar autorizado primero para poder acceder al dispositivo. Así que simplemente emite adb shell ahora - que se dejará con un error: device unauthorized. Please check the confirmation dialog on your device. Sigue estos consejos (opcionalmente marca la casilla para autorizar permanentemente tu ordenador), y ya está: Ahora puedes usar adb para acceder a su dispositivo.


Actualizaciones:

¹ Tenga en cuenta que en versiones posteriores de Linux, la sintaxis de las reglas UDEV ha cambiado ligeramente, como por ejemplo jcomeau_ictx señaló en su comentario. Para los valores que hemos encontrado arriba sería:

SUBSYSTEM=="usb", ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", MODE="0666", GROUP="plugdev", SYMLINK+="android%n"

Dos diferencias: ahora es SUBSYSTEM (sin plural), y el grupo ha cambiado de androiddev a plugdev (el primero no existe en los sistemas recientes, el segundo sí y suele asignarse al menos al primer usuario).

Además, es posible que tenga que añadir el vendorID a su ~/.android/adb_usb.ini (un ID por línea, en notación hexadecimal):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970

1 votos

El formato de la regla udev era diferente en mi sistema Jessie: jcomeau@aspire:~$ tail -n 1 /etc/udev/rules.d/99-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", MODE="0666", GROUP="plugdev", SYMLINK+="android%n" jcomeau@aspire:~$ cat ~/.android/adb_usb.ini # ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT. # USE 'android update adb' TO GENERATE. # 1 USB VENDOR ID PER LINE. 0x0e8d Tuve que ignorar el consejo de correr android update adb e introdúzcalo manualmente como ha indicado.

0 votos

@jcomeau_ictx ¡gracias por el comentario! Por lo que veo en tu comentario, sólo está utilizando un grupo de usuarios diferente ( plugdev en lugar de androiddev ). No está verificado, pero yo diría que la parte importante aquí es que es un grupo que su usuario (que desea utilizar USB con) tiene también.

2 votos

También SUBSYSTEM en lugar de SUBSYSTEMS , ATTR en lugar de ATTRS coma después de MODE="0666" No estoy seguro de si todos esos cambios eran necesarios, pero es lo que funcionó.

4voto

Rob Puntos 11

Algunos comentarios de una distribución Linux más reciente. Fedora 29 con un Nexus 5X o el teléfono Nokia 7.1 (Android One).

Primero desconecta el teléfono, si ya está conectado.

  1. Instalar Android-tools que suministrará ADB ( sudo dnf install android-tools )
  2. Copiar reglas udev ( sudo cp /usr/share/doc/android-tools/51-android.rules /etc/udev/rules.d )
  3. Recargar reglas udev ( sudo udevadm control --reload-rules )
  4. Reinicie ADB para estar seguro ( sudo systemctl restart adb )

Ahora conecta el teléfono y ejecuta adb devices desde la línea de comandos. Probablemente verás un dispositivo listado con "sin permisos". Esto está bien.
SI no está en la lista, tendrás que añadir tu dispositivo al archivo de reglas udev, pero en mi caso, los dispositivos probados simplemente funcionaron con las reglas predefinidas.

Ejecutar adb shell y con suerte recibirás una notificación de seguridad en el teléfono preguntándote si quieres confiar en el ordenador, selecciona sí.
SI en lugar de que tu ordenador diga "error:permisos insuficientes para el dispositivo", tienes que asegurarte de que en el teléfono has puesto el puerto USB en modo "Transferir archivos", y no en "Cargar este dispositivo". En Android 8.1 esto se encuentra en los ajustes en "Dispositivos conectados" > "USB".

Me he dado cuenta de que aunque hoy todo funcione, mañana puede estropearse de repente sin motivo aparente. Si eso ocurre, comprueba primero la configuración del puerto USB en el dispositivo, que puede haber cambiado de nuevo al modo de carga, y si eso falla, revoca las autorizaciones de depuración USB en el dispositivo (en la configuración, en Opciones de desarrollador), y es de esperar que vuelvas a tener la ventana emergente cuando ejecutes adb shell .

Con esto, soy capaz de ejecutar Android Studio y ejecutar en el dispositivo conectado.

1voto

He jugado un poco con USB packet sniffing con Wireshark y había utilizado el modprobe usbmon módulo. Cuando se carga este módulo, adb deja de funcionar. En este caso rmmod usbmon y adb kill-server ayuda.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X