domingo, 3 de julio de 2011

Como preparar tu móvil Android para depurar tus programas de Eclipse en Ubuntu


Este tutorial da por entendido que el lector ya tiene configurado eclipse para poder programar en android.


 
Aparte de la opción de emular un sistema Android en un dispositivo virtual (ADV) también tenemos la opción de hacerlo directamente mediante nuestro móvil/tablet, los pasos a seguir serán estos:



Tu turno!

En primer lugar y para ir preparando el terreno debemos de indicar al dispositivo que se debe de poner en modo "Depuración USB" cuando este conectado. Dirígete a Ajustes --> Aplicaciones --> Desarrollo --> Y marcas la opciones "Depuración USB" (Como opcional puedes marcar la opción "Pantalla activa" así evitara que entre en modo suspensión en la carga lo que implicara también cuando estés programando)





Modo simple


Turno para el SDK de Android!

Puede ser que en las nuevas versiones del SDK de android o del Kernel de Linux ya traigan el soporte implementado para poder usar la depuración en el dispositivo (no estoy seguro), así que previamente prueba este modo simple antes de pasa al modo avanzado:

Conecta tu dispositivo al ordenador mediante USB. 
Desde terminal dirígete donde tengas descomprimido tu SDK a la carpeta platform-tools que se encuentra dentro de ella ( Descargate desde aqui el SDK).

Lo primero y por si las moscas,vamos a detener el servicio de ADB (Android Debug Bridge) que es el encargado en conectar nuestra maquina con el dispositivo en si.

sudo ./adb kill-server 

lo volvemos a reconectar con:

sudo ./adb start-server


Comprueba si te ha funcionado:


./adb devices

debería contestar con algo parecido a

List of devices attached
HT15GV806647    device


Lógicamente a ti te saldrán distintos dispositivos,pero sea como fuere lo a encontrado y esta conectado a el! 



En caso de recibir un:

List of devices attached 
???????????? no permissions 
 
Procede al modo avanzado de configuración.




Modo avanzado

Vamos ha obtener un poco de información del dispositivo, así que, conecta tu dispositivo al ordenador mediante usb y ejecuta la siguiente orden por terminal:

lsusb


Nos debe de aparecer algo así:


Mostrara información de todos los dispositivos conectados a USB. De entre todo lo que te salga tienes que buscar la linea donde salga algo referente a tu dispositivo (En mi caso aparece como "High Tech Computer Corp." ,siglas de HTC )

Bus 002 Device 011: ID 0bb4:0c86 High Tech Computer Corp. 

De esta linea en concreto vamos a extraer dos datos, la ID del vendedor 0bb4 y la ID del producto 0c86 .

Ahora hay que crear unas normas para la próxima vez que se vuelva a conectar, ejecuta la siguiente linea en terminal modificando evidentemente las IDs de vendedor y de producto:

sudo echo SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0c86", SYMLINK+="android_adb", MODE="0666" >> /etc/udev/rules.d/99-android.rules


Con esto le estamos indicando que cree un archivo llamado 99-android.rules
 en la ruta /etc/udev/rules.d con el contenido citado.

Sin salir de terminal, le damos permisos al archivo recién creado:

sudo chmod a+r /etc/udev/rules.d/99-android.rules

Ahora debemos de reconectar el dispositivo para que surjan efecto los cambios, ¡ no hace falta que quites y pongas de nuevo el usb ! equivaldrá a lo mismo si ejecutas en terminal un simple:

sudo restart udev 


 

Turno para el SDK de Android!

Desde terminal dirígete donde tengas descomprimido tu SDK a la carpeta platform-tools que se encuentra dentro de ella ( Descargate desde aqui el SDK).

Lo primero y por si las moscas,vamos a detener el servicio de ADB (Android Debug Bridge) que es el encargado en conectar nuestra maquina con el dispositivo en si.

sudo ./adb kill-server 

lo volvemos a reconectar con:

sudo ./adb start-server

Nota: Creo que es muy importante iniciar el servicio de adb con sudo ya que luego puedes tener problemas de permisos al intentar localizar el dispositivo ,etc. 

Comprueba si te ha funcionado:

./adb devices

deberia contestar con algo parecido a

List of devices attached
HT15GV806647    device


Lógicamente a ti te saldrán distintos dispositivos,pero sea como fuere lo a encontrado y esta conectado a el! 

En caso de recibir un:

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

Mata el servicio adb y vuelve arrancarlo pero usando sudo como cite antes.




Turno para Eclipse!



Después de tanto rollo, vamos a ver si esto esta funcionando...
Abre tu Eclipse en el proyecto Android en el que estas trabajando y colocate en el archivo AndroidManifest.xml y declara tu aplicación como "Debugeable" ,esto es, añade la opción android:debuggable="true" en el elemento <application> ,después, cambia la perspectiva a "DDMS"  y  fíjate si en la ficha "Devices" aparece tu dispositivo como se muestra en la imagen: 




Todo perfecto pues! Dale a "Run" en Eclipse para comprobar que te lo ejecuta en tu dispositivo.


Un ejemplo con mi móvil de como fue la operación (Salieron unas marcas de dedos bien jode-fotos)

Para cualquier duda/consejo/critica podéis postear algún comentario.

Saludos!


Nota: Encontré este script googleando que te descarga e instala el SDK de android,NDK,Eclipse y te prepara la conexión para que puedas depurar por móvil,tiene muy buena pinta pero no lo he probado (Mire un poco el código y parece estar correcto)

Nota2: Una lista de identificadores de vendedores

 





CompañiaID de USB
Acer 0502
Dell 413c
Foxconn 0489
Garmin-Asus 091E
Google 18d1
HTC 0bb4
Huawei 12d1
Kyocera 0482
LG 1004
Motorola 22b8
Nvidia 0955
Pantech 10A9
Samsung 04e8
Sharp 04dd
Sony Ericsson 0fce
ZTE 19D2

13 comentarios:

  1. Me funcionó a la primera, en windows sería más o menos la misma forma,no?

    ResponderEliminar
  2. Oh dios, por fin conseguí que me funcionase, actualicé mi móvil a gingerbread, con froyo podía depurar pero con gingerbread no, mil gracias por tu aporte, con el simple me bastó.

    ResponderEliminar
  3. Buenas de nuevo, me he servido de mi experiencia con tu post para publicar otro post en mi blog de gatsu-anotaciones. Por supuesto menciono y recomiendo tu blog. La entrada es http://gatsu-anotaciones.blogspot.com/2012/01/depura-tus-aplicaciones-caseras-android.html

    ResponderEliminar
    Respuestas
    1. Me alegro que te haya servido y agradezco de veras tu detalle de citarme en tu blog :D

      Eliminar
  4. Otro que se suma a las gracias.

    Por algún motivo utilizando el Windows-Eclipse del portatil todo funcionaba bien, pero al pasar al ubuntu-eclipse del fino no reconocía el dispositivo.

    Este post (junto con otros que también había encontrado por google) me ha ayudado mucho a continuar con la depuración en el dispositivo.

    Gracias ;)

    ResponderEliminar
  5. Por un error de teclado, antes he escrito "fino" y debería de haber puesto "fijo". Me refería al intentar depurar con el ordenador fijo. Lo siento :s

    ResponderEliminar
  6. Gracias... fantasticamente explicado.

    ResponderEliminar
  7. Hola,

    Todo ha funcionado correctamente a la primera :-) Excelente explicación.

    Ahora tengo un pequeño problema, no consigo que me recupere los mensajes de log que envío desde el programa para depurar procesos, al iniciar el logCat me da el siguiente mensaje:

    Unable to open log decive 'dev/log/main': No such file or directory.

    No se si tengo que crear el directorio a mano o lo hace directamente Eclipse.

    Gracias.

    ResponderEliminar
  8. Hola,

    Trabajo sobre Windows, y en el DDMS me aparece el móvil conectado, pero a la hora de ejecutar la aplicación me abre el dispositivo virtual que tengo configurado en vez de el móvil.

    Alguna pista de porq ocurre esto???

    Gracias

    ResponderEliminar
    Respuestas
    1. Si, simplemente modifica la configuración del dispositivo a usar por defecto cuando vayas a depurar.

      Lo modificas de maquina virtual a dispositivo.

      Eliminar
  9. hola necesito esta misma explicacion para window que no puedo usar estos comandos

    ResponderEliminar
  10. Me apareció acceso denegado cuando ocupe la ruta /etc/udev/rules.d/99-android.rules lo que hice fue ocupar el comando cd /etc/udev/rules.d/ y luego sudo gedit 99-android.rules escribí la configuración SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0c86", SYMLINK+="android_adb", MODE="0666" claro con mis valores y ya funciono, Gracias. Estoy desarrollando en Android Studio que por cierto tiene un mayor rendimiento en UBUNTU que en W8.1 además que en W8.1 se muere de vez en vez.

    ResponderEliminar