configurar dispositivo para desarrollo (???????????? sin permisos)

Estoy usando un teléfono Samsung Galaxy Nexus (plataforma Android 4.0 ).

Estoy desarrollando una aplicación para Android en Ubuntu Linux OS. Me gustaría ejecutar mi aplicación directamente en el dispositivo del teléfono Samsung, así que realicé los siguientes pasos de configuración:

  1. en mi proyecto AndroidManifest.xml , agregué android:debuggable="true" al elemento

  2. En el dispositivo, en Configuración> Seguridad habilitada Fuentes desconocidas

  3. En el dispositivo, en Configuración> Opciones de desarrollador habilitadas Depuración de USB

  4. En mi computadora, creé el archivo /etc/udev/rules.d/51-android.rules con el siguiente contenido:

     SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev" 
  5. En mi computadora, ejecute el comando chmod a+r /etc/udev/rules.d/51-android.rules

Luego, en mi computadora, abrí una terminal y adb devices comando adb devices :

 List of devices attached ???????????? no permissions 

Ya que no vi mi dispositivo pero solo ???????????? no permissions ???????????? no permissions , luego ejecuto los siguientes comandos:

  adb kill-server adb start-server adb devices 

Pero todavía tengo:

 List of devices attached ???????????? no permissions 

¿Por qué? ¿Qué me estoy perdiendo?

Lo que funciona para mí es matar y reiniciar el servidor adb. En Linux: sudo adb kill-server y luego sudo adb start-server . Luego detectará casi todos los dispositivos de forma inmediata.

Nada funcionó para mí hasta que finalmente encontré la respuesta aquí: http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html

Estoy copiando el texto aquí en caso de que desaparezca en el futuro.

Cree un archivo llamado /tmp/android.rules con los siguientes contenidos (los números de proveedor hexadecimal se tomaron de la página de la lista de proveedores):

 SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666" SUBSYSTEM=="usb", ATTRS{idVendor}=="1bbb", MODE="0666" 

Ejecute los siguientes comandos:

 sudo cp /tmp/android.rules /etc/udev/rules.d/51-android.rules sudo chmod 644 /etc/udev/rules.d/51-android.rules sudo chown root. /etc/udev/rules.d/51-android.rules sudo service udev restart sudo killall adb 

Desconecte el cable USB entre el teléfono y la computadora.

Vuelve a conectar el teléfono.

Ejecute los adb devices para confirmar que ahora tiene permiso para acceder al teléfono.

Tenga en cuenta que es posible usar , USER="$LOGINNAME" lugar de , MODE="0666" en el archivo .rules , sustituyendo $LOGINNAME por su nombre de usuario, es decir, qué id -nu imprime.

En algunos casos, puede ser necesario dar al archivo de reglas de udev un nombre que ordene cerca del final, como z51-android.rules .

Ingrese los siguientes comandos:

adb kill-server sudo ./adb start-server adb devices

El problema es que no estás ejecutando el servidor adb como root.

Intenté todo lo anterior, ninguno funcionó … finalmente funcionó cuando cambio de conectado como de MTP a la cámara (PTP).

Hay una gran cantidad de malas respuestas publicadas en esta pregunta que van desde insistir en ejecutar adb como root (que no debe promoverse como la única o incluso recomendada solución) hasta resolver problemas completamente independientes.

Aquí está la receta más corta y universal para cuidar los permisos de todos los dispositivos adb y fastboot a la vez:

 echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:ff420?:*", MODE="0666"' | sudo tee /etc/udev/rules.d/99-android.rules sudo udevadm control --reload-rules sudo udevadm trigger --verbose --action=add --subsystem-match=usb 

O podría usar una versión un poco más larga que publiqué en este momento.

En cuanto a lo específico que OP hizo mal en su pregunta, no estaba recargando las reglas de udev después de editar el archivo .rules .

También OP no dijo qué versión de Android (también conocida como ROM) tenía en su teléfono. El valor de idVendor se establece en el software y, por lo tanto, depende de la ROM. Por lo tanto, el valor de 04E8 que utilizó en su regla original solo habría funcionado para dispositivos con ROM de stock de Samsung. Pero esto no es un problema para esta regla de udev : coincide con todos los dispositivos con interfaces adb o fastboot independientemente de su VendorID .

En Archlinux esto puede suceder ocasionalmente. La solución:

 $ sudo -s # adb kill-server # adb start-server 

Para aquellos que usan Debian, la guía para configurar un dispositivo en Ubuntu para crear el archivo “/etc/udev/rules.d/51-android.rules” no funciona. Seguí las instrucciones desde aquí . Poniendo el mismo aquí para referencia.

Edite este archivo como superusuario

 sudo nano /lib/udev/rules.d/91-permissions.rules 

Encuentra el texto similar a este

 # usbfs-like devices SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0664″ 

A continuación, cambie el modo a 0666 como a continuación

 # usbfs-like devices SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0666″ 

Esto permite que adb funcione, sin embargo, aún necesitamos configurar el dispositivo para que pueda ser reconocido. Necesitamos crear este archivo como superusuario,

 sudo nano /lib/udev/rules.d/99-android.rules 

y entrar

 SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”0bb4″, MODE=”0666″ 

la línea anterior es para HTC, sigue la publicación de @ grebulon para obtener una lista completa.

Guarde el archivo y luego reinicie udev como super usuario

 sudo /etc/init.d/udev restart 

Conecte el teléfono a través de USB y debe detectarse cuando comstack y ejecuta un proyecto.

Tuve el mismo problema, la solución es como compañero: (por cierto, no tienes que rootear tu dispositivo).

  1. Escriba “su” para cambiar a superusuario.
  2. your-path / adb kill-server.
  3. your-path / adb start-server.
  4. Si no se produce ningún error, puede ver la lista de dispositivos con “dispositivos your-path / adb” en la cuenta raíz.
  5. Salga de superusuario.
  6. Ahora puede realizar “dispositivos adb” en su cuenta.

Disfrutar.

Tuve el mismo problema con mi Galaxy S3. Mi problema fue que el valor de 04E8 no era el correcto. Para encontrar el correcto, conecte su teléfono inteligente a la computadora y ejecute lsusb en la terminal. Enumerará su teléfono inteligente así:

 Bus 002 Device 010: ID 18d1:d002 Google Inc. 

Entonces, el valor idVendor correcto es 18d1 . Y la línea en /etc/udev/rules.d/51-android.rules tiene que ser:

 SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

Luego ejecuto sudo udevadm control --reload-rules y todo funcionó!

Sé que esto puede ser un poco tarde, pero aquí hay un artículo muy bueno sobre cómo agregar manualmente el controlador USB ADB de Android. Agregar manualmente el controlador USB ADB de Android en Ubuntu 14.04 LTS

Editado para agregar contenido de enlace

Pasos

Nota: asegúrese de haber conectado su dispositivo Android en el modo de depuración de USB

Abra el terminal ( CTRL + ALT + T ) y entre el comando: lsusb

Ahora puede obtener una respuesta similar a esto:
Bus 002 Device 013: ID 283b:1024

Nota: Con referencia a este Bus 002 Device 008: ID 283b:1024
{idVendor}==”283b” {idProduct}==”1024″

Ahora ingrese el siguiente comando: sudo gedit /etc/udev/rules.d/51-android.rules
Esto crea el archivo de reglas de Android ( 51-android.rules ) o abre el existente en la ubicación especificada ( /etc/udev/rules.d )

Agregue una nueva línea a este archivo:
SUBSYSTEM==”usb”, ATTRS{idVendor}==”283b”, ATTRS{idProduct}==”1024″, MODE=”0666″

Nota Edite los valores de idVendor e idProduct con los valores de su dispositivo. Guardar y cerrar.

Ahora ingrese el siguiente comando:
sudo chmod a+rx /etc/udev/rules.d/51-android.rules – otorgar permiso de lectura / ejecución
sudo service udev restart – Reinicia el servicio udev

Ahora tenemos que agregar el idVendor a adb_usb.ini . Ingrese los siguientes comandos:
cd ~/.android
gedit adb_usb.ini

Agregue el siguiente valor 0x283b

Esto no es más que 0x (valor de idVendor ). Entonces reemplace el valor con. Respecto al valor de su dispositivo Guarde y cierre el archivo.

Ahora ingrese el siguiente comando:
sudo service udev restart

Conecta el dispositivo Android y vuelve a conectarlo.
Ahora ingrese el siguiente comando:
adb kill-server
adb devices

¡Aquí tienes! Su dispositivo debe estar en la lista.

Copiado de agregar manualmente el controlador USB Android ADB en Ubuntu 14.04 LTS

Trabajó para mi.

  1. Siga las instrucciones en http://developer.android.com/guide/developing/device.html
  2. Reemplace la identificación del proveedor de “0bb4” con “18d1” en /etc/udev/rules.d/51-android.rules. O agregue otra línea que diga: SUBSISTEMA == “usb”, SYSFS {idVendor} == “18d1”, MODE = “0666”
  3. reinicie la computadora o simplemente reinicie el servicio udev.

Cuando reinicie udev, elimine el servidor de adb y comience el servidor de adb goto android sdk installation path y haga todo en sudo. luego ejecuta dispositivos adb, resolverá el problema de permisos.

Mi dispositivo es POSITIVO y mi sistema operacional es Ubuntu 14.04 LTS Entonces, mi problema era el nombre de la variable

Creo el archivo /etc/udev/rules.d/51-android.rules y puse SUBSYSTEM=="usb", SYSFS{idVendor}=="1662", MODE="0666"

Desconecté el dispositivo y ejecuté:

 $ sudo udevadm control --reload-rules $ sudo service udev restart 

Después de esto conecté el dispositivo Android en modo desarrollador de nuevo y

 $ adb devices List of devices attached 1A883XB1K device 

Sin desconectar

Todas las respuestas proporcionadas suponen que puede desenchufar y volver a conectar el cable USB. En situaciones donde esto no es posible (por ejemplo, cuando está alejado), puede hacer lo siguiente para hacer básicamente lo que harían las reglas de udev sugeridas al volver a conectar:

 lsusb 

Encuentre el dispositivo que le interesa, por ejemplo:

 Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus 

Tome nota del número de bus en el que está y luego ejecútelo, por ejemplo, para el bus 003 :

 sudo chmod a+w /dev/bus/usb/003/* 

Claramente, esto puede ser más permisivo de lo que desees (puede haber más dispositivos conectados que solo este), pero entiendes la idea.

Pruebe en lugar de GROUP="plugdev" usar el grupo principal de su usuario.

La comunidad de GitHub mantuvo las reglas de udev

https://github.com/M0Rf30/android-udev-rules/blob/master/51-android.rules

Esta es la lista de reglas de udev más completa que he visto hasta ahora, incluso más que el sudo apt-get install android-tools-adb actual recomendado sudo apt-get install android-tools-adb en la documentación oficial , pruébalo.

NO debe adb servidor adb como root, como sugieren otras respuestas. En cambio, si está usando Arch Linux, haga lo siguiente:

  1. Instale el paquete android-udev con Pacman
  2. Recarga las reglas de udev:

     # udevadm control --reload-rules 
  3. adbusers grupo de adbusers y luego cierre la sesión e inicie sesión:

     # usermod -aG adbusers $LOGNAME 

Fuente: https://wiki.archlinux.org/index.php/android#Configuring_adb

¡NO siga soluciones que sugieran usar sudo ( sudo adb start-server )! Esta ejecución adb como root (administrador) y NO debe ejecutarse así !!! ¡Es una MALA solución !

Todo lo que se ejecuta como root puede hacer cualquier cosa en su sistema, si crea o modifica un archivo puede cambiar su permiso para que solo sea utilizado por root. De nuevo, ¡NO!

Lo correcto es configurar su sistema para que el USUARIO tenga el permiso; consulte esta guía que escribí sobre cómo hacerlo correctamente.

En mi caso en ubuntu 12.04 LTS, tuve que cambiar mi modo usb HTC Incredible de carga a Media y luego el dispositivo apareció en adb. Por supuesto, la depuración ya estaba activada en ambos casos.

Usé su y comenzó a funcionar. Cuando uso Jetbrains con un usuario normal, veo este problema, pero después de reiniciar Jetbrains en modo su, puedo ver mi dispositivo sin hacer nada.

Estoy usando Ubuntu 13.04 y Jetbrains 12.1.4

También puede intentar editar el archivo adb_usb.ini , ubicado en /home/username/.android/ . Este archivo contiene la lista de proveedores de ID de los dispositivos que desea conectar. Simplemente agregue el proveedor de identificación de su dispositivo en una nueva línea (es una identificación por línea). A continuación, reinicie el servidor adb y vuelva a conectar su dispositivo.

Me funcionó en Ubuntu 12.10.

Si alguien enfrenta el siguiente mensaje de error cuando usa adb devices

 no permissions (verify udev rules); see [http://developer.android.com/tools/device.html] 

Ejecute lo siguiente

 sudo -s adb kill-server adb start-server 

Eso solucionó el problema en un dispositivo Android personalizado