¿Cómo hago que ADB detecte mi dispositivo en Linux?

18

Acabo de recibir mi nuevo y brillante Wileyfox Swift - y antes de ponerla en uso Quiero oem unlocky raíz de ella (como suelo hacer con los nuevos dispositivos;) El problema es que, aunque está activado en el dispositivo, y una línea correspondiente en /etc/udev/rules.d/51-android.rulesexiste , el dispositivo no es visto por adb devices.

Sé que hay varias respuestas dispersas en este sitio, pero son difíciles de encontrar, solo cubren un dispositivo específico o no cubren todos los pasos que finalmente necesité. Así que aprovecho esto como una oportunidad para una pregunta canónica independiente del dispositivo y le doy una respuesta detallada a continuación:

¿Cómo puedo ver y usar mi dispositivo Android adben Linux?

Izzy
fuente
Siempre estoy abierto a la crítica, pero un voto negativo sin explicación es difícil de interpretar. Entonces, ¿el downvoter explicará qué se debe mejorar en la pregunta? Prometo no abusar de mis poderes de mod para castigo :)
Izzy
3
Supongo que el votante no se dio cuenta de que publicó la pregunta para responderla por sí mismo (no debe haberlo notado en la respuesta). Dado que no hay indicios en la pregunta o comentarios de que se publicó con el fin de responder a sí mismo, el votante podría haber objetado el penúltimo párrafo (muestra pereza, si se lee en el contexto de cualquier usuario ordinario y su pregunta). No puedo pensar en ninguna otra razón a partir de ahora.
Señor del fuego
1
@Firelord suena convincente (editó un poco la pregunta para evitar pasos de falla adicionales). Pero entonces, ese usuario debería haber votado a favor la respuesta. ¿O me perdí algo allí también? ;)
Izzy

Respuestas:

24

Habilite la depuración de USB en el dispositivo

Esto se hace en Configuración ›Desarrollo . Si no tiene esa entrada en su menú de configuración, vaya a Configuración ›Acerca de , desplácese hasta el" Número de compilación "y martillee como un mono hasta que su dispositivo lo felicite por haberse convertido en desarrollador. Regrese a la página principal del menú de Configuración y cerca de la parte inferior debería ver la configuración de "Desarrollo" (o "Desarrolladores") ahora. Ingrese y habilite la depuración de USB aquí.

Identifica el dispositivo

Primero necesitamos saber cómo se identifica el dispositivo en el bus USB. Para eso, con el dispositivo Android NO conectado, tome un shell y ejecute el comando lsusb. Luego conecte el dispositivo y ejecute el comando nuevamente. Encuentra la nueva línea. Para el Wileyfox Swift este es un "dispositivo sin nombre":

Bus 004 Device 003: ID 2970:2282

Establecer las reglas para ADB

Ahora necesitamos los números al final de la línea anterior: 2970:2282. Estos especifican el proveedor (2970) y el dispositivo en sí (2282). Teniendo esos detalles, necesitamos un shell raíz en nuestra máquina Linux para editar (o crear, si aún no existe) el /etc/udev/rules.d/51-android.rulesarchivo. Ahí, agregue una línea para su dispositivo. La siguiente línea de ejemplo muestra cómo se ve el Wileyfox Swift: ¹

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

Si tiene un dispositivo diferente, reemplace las ID del proveedor y del producto con lo que encontró anteriormente cuando se ejecuta lsusb. Una breve explicación de la línea:

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

Esa regla entró /etc/udev/rules.d/51-android.rules, debemos decir udevque la usemos. La forma más segura (junto a un reinicio;) es reiniciando el udevservicio. Dependiendo de su distribución de Linux, esto se puede hacer a través de service udev restarto /etc/init.d/udev restart.

Hecho eso, deja la cáscara de la raíz. Desconecte y vuelva a conectar su dispositivo Android, intente adb devicesnuevamente. La mayoría de los dispositivos aparecieron ahora, pero no el Wileyfox Swift , que obviamente quiere algunos mimos adicionales. Si se encuentra en esa situación, abra (o cree si no existe) el archivo ~/.android/adb_usb.iniy agregue una sola línea, nombrando al proveedor con el que se enteró lsusbanteriormente; para el Swift que sería 0x2970(sí, aquí debe prefijarlo 0xpara 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 nuevamente. Ahora adb devicesdebería verlo.

Conectando el dispositivo

Es posible que haya notado que adb devicesle dije algo así 0123456789ABCDEF unauthorized. Eso está bien y para su seguridad (dispositivos): su computadora debe estar autorizada primero para poder acceder al dispositivo. Así que simplemente emita adb shellahora, que se cerrará con un error: device unauthorized. Please check the confirmation dialog on your device.Seguir ese consejo (opcionalmente marque la casilla de verificación para autorizar permanentemente su computadora), y ya está: ahora puede usar 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 encontramos arriba eso sería:

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

Dos diferencias: ahora SUBSYSTEM(no en plural), y el grupo ha cambiado de androiddeva plugdev(el primero no existe en los sistemas recientes, el último sí y generalmente se asigna al menos al primer usuario).

Además, es posible que deba agregar el ID del proveedor a su ~/.android/adb_usb.ini(una ID por línea, en notación hexadecimal):

# ANDROID 3RD PARTY USB VENDOR ID LIST
# 1 USB VENDOR ID PER LINE.
0x2970
Izzy
fuente
1
el formato para 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 para ejecutarlo android update adbe ingresarlo manualmente como dijiste.
jcomeau_ictx
@jcomeau_ictx gracias por los comentarios! Por lo que puedo ver en tu comentario, solo está usando un grupo de usuarios diferente (en plugdevlugar de androiddev). No verificado, pero diría que la parte importante aquí es que es un grupo que también tiene su usuario (con el que desea usar USB).
Izzy
1
también en SUBSYSTEMlugar de SUBSYSTEMS, en ATTRlugar de ATTRS, coma después de MODE="0666" no estar seguro de si todos esos cambios fueron necesarios, pero eso fue lo que funcionó.
jcomeau_ictx
Oh, gracias, extrañé esos pequeños, @jcomeau_ictx, ¡buen punto!
Izzy
Para Linux, la gente no inteligente sudo wget -O /etc/udev/rules.d/51-android.rulesde aquí trabajó para mí para mi Xiaomi Mi A1. Por supuesto, es mejor aprender, pero es bueno ser perezoso :)
beeshyams
0

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

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

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

Ahora conecta el teléfono y corre adb devicesdesde la línea de comandos. Probablemente verá un dispositivo en la lista con "sin permisos". Esto esta bien.
SI no está en la lista, tendrá que agregar su dispositivo al archivo de reglas de udev, pero para mí, los dispositivos probados simplemente funcionaron con las reglas predefinidas.

Ejecute adb shelly, con suerte, recibirá una notificación de seguridad en el teléfono preguntándole si desea confiar en la computadora, seleccione sí.
En cambio, si su computadora dice "error: permisos insuficientes para el dispositivo", debe asegurarse de que en el teléfono haya configurado su puerto USB en el modo "Transferir archivos" y no "Cargue este dispositivo". En Android 8.1, esto se encuentra en la configuración en "Dispositivos conectados"> "USB".

Me he dado cuenta de que incluso si tienes todo funcionando hoy, que mañana puede romperse repentinamente sin razón aparente. Si eso sucede, primero verifique la configuración del puerto USB en el dispositivo, que puede haber cambiado nuevamente al modo de carga, y si eso falla, revoque las autorizaciones de depuración USB en el dispositivo (en la configuración en Opciones del desarrollador), y con suerte debería obtener el pop de nuevo cuando corres adb shell.

Con esto, puedo ejecutar Android Studio y ejecutarlo en el dispositivo conectado.

Robar
fuente