La columna 80

El blog técnico-personal de Ángel J. Vico… en español

Acceder al teléfono con el SDK de Android

Posted by Ángel J. Vico en 11 de marzo de 2011

Con nuestro entorno de desarrollo de aplicaciones Android perfectamente instalado y puesto al día, tenemos todo lo necesario para empezar a desarrollar aplicaciones Android. Pero, quizás, antes nos interese configurar una cosa más: el acceso a nuestro dispositivo Android (normalmente un smartphone) desde el propio SDK. Esto resulta útil para probar nuestras propias aplicaciones en un dispositivo real, pero también nos permitirá hacer capturas de pantalla, instalar aplicaciones descargadas desde el PC o simplemente echar un vistazo al interior software de nuestro teléfono.

Como hemos instalado nuestro entorno en una máquina virtual VirtualBox con Linux que se ejecuta sobre Windows, el acceso a nuestro teléfono a través de USB será algo más complicado que si tuviéramos el SDK instalado en la máquina real. En nuestro caso, el proceso va a constar de varias fases:

  • Conseguir que Windows reconozca nuestro teléfono (algo que no es tan trivial como pueda parecer).
  • Configurar la máquina virtual para que pueda acceder al teléfono.
  • Conseguir que Linux reconozca el dispositivo para que las herramientas del SDK puedan acceder a él.

El proceso que describo en este post está orientado al Samsung i5700, también conocido como Samsung Galaxy Spica o Galaxy Lite, con Android 2.1. Esto no es por nada en particular, salvo porque es el teléfono que tengo. En cualquier caso, el proceso debería ser bastante similar con cualquier otro dispositivo. Durante el proceso iré indicando qué cosas son específicas de mi teléfono.

Si nuestra configuración es diferente a la utilizada aquí, puede que no tengamos que hacer todos los pasos. Si, por ejemplo, nuestro entorno de desarrollo está instalado en una máquina real Windows, en cuanto consigamos que Windows detecte el teléfono habremos terminado. Si se trata de una máquina real Linux, tendremos que centrarnos únicamente en la parte en la que se configura Linux para que reconozca el dispositivo.

Se capta la idea, ¿verdad? Pues empezamos…

Conseguir que Windows reconozca el teléfono

Lo primero que conviene hacer es activar el modo de depuración del móvil. Aunque esto no es estrictamente necesario, en mis pruebas ha funcionado mejor así. Y, como de todas formas, depurar con el móvil es  una de las principales cosas que queremos hacer…

La forma de hacerlo es la siguiente:

  1. Abrimos los ajustes de Android.
  2. Seleccionamos Aplicaciones.
  3. Seleccionamos Desarrollo.
  4. Activamos la opción Depuración de USB.

AjustesAjustes - AplicacionesAjustes - Aplicaciones - Desarrollo

Para que Windows lo reconozca lo más probable es que tengamos que instalar su driver. En el caso del Spica, Samsung no distribuye drivers de forma independiente, sino como parte de su software de gestión del teléfono, Samsung Kies. Ese software es bastante pesado y no suele servir para mucho aparte de para actualizar el firmware del teléfono, algo que, dada la política de actualizaciones de Samsung, no harás casi nunca desde su propio software. Afortunadamente, si no queremos instalar todo Kies hay una forma sencilla de instalar sólo el driver que necesitamos:

  1. Lo primero es descargar Kies. En su momento, yo hice este proceso con la versión 1.5.3. La versión actual es la 2.0.0 y tiene un formato diferente que no permite utilizar el método que describo aquí. Mientras descubro cómo hacer algo parecido con el nuevo formato, se puede utilizar este enlace para descargar la versión 1.5.3.
  2. Una vez descargado, tenemos que descomprimir el archivo (en este caso, Kies_1.5.3.10093_82.exe). Para ello podemos usar 7zip.
  3. En el directorio descomprimido CabFile\USB Driver encontraremos el archivo SAMSUNG_USB_Driver_for_Mobile_Phones.exe.cab. Lo descomprimimos también con 7zip: obtenemos el archivo SAMSUNG_USB_Driver_for_Mobile_Phones.exe
  4. Ejecutamos el archivo que hemos obtenido y se instalarán los drivers.

Igual te estás preguntando, ¿y por qué no compartes directamente el instalador del driver? A lo que yo respondo: ¿por qué no? Total, ya puestos… Aquí lo tienes: Samsung USB Driver. Aunque no viene mal saber de donde ha salido.

Configurar la máquina virtual VirtualBox

El proceso es el siguiente:

  1. Si tenemos la máquina virtual abierta, la cerramos. Hay que cerrarla desde el sistema operativo, guardar su estado no sirve. Si la última vez que la utilizamos la dejamos así, habrá que abrirla y cerrarla correctamente antes de seguir.
  2. Conectamos el teléfono al PC con el cable USB (no hay que activar el acceso a los archivos del teléfono).
  3. Abrimos la interfaz general de VirtualBox.
  4. Seleccionamos nuestra máquina virtual y pulsamos sobre el icono Configuración.
  5. En el panel de la izquierda seleccionamos USB:
    Configuración - USB
  6. Pulsamos en el botón Agregar filtro desde dispositivo (el del icono con el signo de suma verde) y en el menú que se despliega, seleccionamos el teléfono (en mi caso, Samsung Electronics GT-I5700 [0224]). El dispositivo se agregará a la lista:
    Configuración - Dispositivo USB agregado
  7. Pulsamos Aceptar para guardar los cambios.
  8. Desconectamos el teléfono.
  9. Arrancamos la máquina virtual.
  10. Volvemos a conectar el teléfono (si aparece una advertencia de que se está instalando el software para VirtualBox USB, debemos esperar a que termine).

Si todo ha ido bien, la máquina virtual estará configurada para apropiarse del teléfono cada vez que la arranquemos. Esto funciona así: cuando VirtualBox arranca la máquina virtual, busca en el sistema los dispositivos que aparecen en la lista a la que acabamos de agregar el teléfono y, si los encuentra, establece un puente entre la máquina virtual y la real para que el sistema operativo huésped pueda acceder al dispositivo USB.

La primera consecuencia de esto es que, a partir de ese momento, el sistema operativo anfitrión ya no puede acceder al dispositivo, por lo que no es posible que ambas máquinas accedan al teléfono al mismo tiempo. La segunda consecuencia es que el invento sólo funcionará si el dispositivo se conecta después de abrir la máquina virtual. Así que, la forma correcta de trabajar con el teléfono implica abrir la máquina virtual primero y conectar el dispositivo después. Nota: si la máquina virtual se arranca desde apagado total (no desde un estado guardado) es muy posible que detecte el teléfono aunque ya estuviera conectado. No obstante, el método descrito aquí es el más seguro.

Conseguir que Linux reconozca el teléfono

Aunque Linux detecta el dispositivo desde el arranque (si hemos hecho correctamente el paso anterior), no lo configura por sí mismo de la forma necesaria para poder usarlo con las herramientas del SDK. Para que lo haga correctamente, tenemos que hacer algunos cambios:

  1. Con un usuario que tenga permisos de administración, abrimos un terminal.
  2. Creamos un nuevo archivo para el dispositivo USB:

    sudo gedit /etc/udev/rules.d/99-android.rules
    

    Si pide la contraseña, introducimos la del usuario actual.
    Usamos el 99 para que se ejecute el último, impidiendo que otros archivos modifiquen los permisos que definimos.

  3. Añadimos una línea con los datos del nuestro móvil. La línea tendrá el siguiente formato:

    SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666"
    

    donde 04e8 es el identificador del fabricante. La lista de identificadores la podemos encontrar aquí: USB Vendor IDs. El identificador 04e8 se corresponde con Samsung. Habrá que sustituirlo por el que corresponda. La sección Comprobaciones, al final de este post, explica cómo conseguir este identificador si no conseguimos encontrarlo.

  4. Seleccionamos Archivo | Guardar para guardar los cambios y después Archivo | Salir para cerrar el editor.
  5. Para que el sistema operativo reconozca el móvil, es necesario reiniciar UDEV con el siguiente comando:

    sudo service udev restart
    

    Si no funcionara, podemos usar este otro:

    sudo /etc/init.d/udev restart
    

A partir de este momento, el teléfono será totalmente accesible desde el SDK, tanto desde las utilidades de línea de comandos, como desde el plugin ADT dentro de Eclipse.

Comprobaciones

  • Primero, para ver que el dispositivo ha sido detectado correctamente por Linux, podemos usar el comando lsusb. Este comando lista todos los dispositivos USB conectados. Entre ellos deberíamos ver nuestro móvil. En mi caso:

    Bus 001 Device 007: ID 04e8:681c Samsung Electronics Co., Ltd
    

    Los primeros caracteres del ID son el identificador del fabricante, por lo que si el nuestro no aparece en la lista que enlacé antes, podemos obtenerlo de esta forma.

  • Para ver si los permisos definidos (0666) se han aplicado correctamente después de reiniciar UDEV o tras arrancar Linux, tenemos que ejecutar el siguiente comando:

    ls -l /dev/bus/usb/<bus>/<device>
    

    siendo <bus> y <device> los datos que obtuvimos de la ejecución de lsusb (varían cada vez que conectamos el móvil). En el ejemplo anterior, el comando quedaría así:

    ls -l /dev/bus/usb/001/007
    

    El resultado del comando será algo así:

    crw-rw-rw- 1 root root 189, 6 2010-11-17 18:09 /dev/bus/usb/001/007
    

    Como se puede observar, los permisos son los esperados: lectura y escritura para todos los usuarios (0666).

  • Finalmente, para asegurarnos de que el ADB (Android Debug Bridge, la herramienta que gestiona el acceso al móvil desde el SDK) podrá acceder a él hay que usar el siguiente comando, desde el directorio tools (platform-toolsa partir de la versión 2.3) del SDK:

    adb devices
    

    En la lista de dispositivos debería aparecer el número de serie del móvil. Para comprobar que es el número de serie adecuado podemos ejecutar el siguiente comando:

    udevadm info --query=property --name=/dev/bus/usb/001/007
    

    teniendo en cuenta que 001 y 007 son el bus y el device que obtuvimos antes. Entre los resultados, tendremos que fijarnos en la propiedad ID_SERIAL_SHORT. Debería coincidir con el que muestra el comando adb devices.

Recuerda que en esta página dispones de enlaces a todos los artículos sobre Android que he publicado en La columna 80.

Una respuesta to “Acceder al teléfono con el SDK de Android”

  1. MalArt said

    GRACIAS!!
    La verdad es que has acabado con uno de mis dolores de cabeza.
    Soy nuevo en Gnu/linux… y hacia como 3 dias k googleaba buscando como conectar el spica.
    Merci y suerte!😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s