Curso de Android
De WikiEducator
Saltar a: navegación, buscar
Guía Administración Android
Tutorial sobre conceptos básicos sobre el sistema operativo Android
Presentación | Conceptos básicos | Ciclo de desarrollo | Bootloader | fastboot | recovery | adb | Sistema de Ficheros | Rootear | Eclipse | emulador
Contenido
- 1 Herramienta adb
- 1.1 ¿Qué es ADB?
- 1.2 Cómo usar ADB
- 1.3 Configuración previa para usar adb
- 1.4 Usos más frecuents de adb
- 1.4.1 adb help
- 1.4.2 Comprobación comunicación
- 1.4.3 Comunicación vía shell
- 1.4.4 Transferencia de ficheros
- 1.4.5 Ver el fichero de log en tiempo real
- 1.4.6 Instalación de aplicaciones
- 1.4.7 Reiniciar el dispositivo
- 1.4.8 Error "Device not found"
- 1.4.9 Errores habituales
- 1.4.10 Error en funcionamiento de dispositivos físicos y emuladores
- 1.5 adb vía wifi
- 1.6 Eclipse y adb
- 1.7 Ejemplos uso terminal Linux en en Android
Herramienta adb
¿Qué es ADB?
- ADB son las siglas de Android Debug Bridge
- Es una herramienta de desarrollo incluida en el SDK de Android.
- Comunica el dispositivo Android o el emulador con el ordenador.
- Sirve para instalar aplicaciones, ver ficheros de log, hacer push o pull de ficheros...
Cómo usar ADB
- Debemos instalar el SDK de Android o el ADT-Bundle
- Está situado en el directorio platform-tools.
- Es conveniente añadirlo en la variable de entorno $PATH (fichero $HOME/.bashrc en Linux):
juanda@juanda-PC:~$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games:/home/juanda/Android/sdk/tools:/home/juanda/Android/sdk/platform-tools
- No es necesario ser root para utilizarlo
- Normalmente se utiliza vía USB pero también puede hacerse vía wifi.
Configuración previa para usar adb
Windows
- Tendremos que descargar el driver adb para el dispositivo.
- En la web de Android hay un listado de enlaces para la descarga de los drivers de los principales fabricantes.
- Puedes encontrar un driver genérico que se encuentra en la carpeta android-sdk-windows\usb_driver del SDK Android.
- Lo más probable es que tengas que utilizar el driver del fabricante.
- A veces también hace falta otro ejecutable adb distinto al que aparece en el Android SDK.
- Para los que no aparecen habrá que ir a sus webs o contactar con su servicio de soporte.
- No siempre existen los drivers o funcionan como debieran ¡ojo!
- En ocasiones para que funcione se utiliza el driver de google pero modificando el fichero de instalación del driver: adb_usb.ini
Mac
- No hace falta hacer nada.
- Filosofia MAC: O funciona directamente o no funciona.
Ubuntu
- Es conveniente leer la documentación sobre udev (gestión dinámica de dispositivos en Linux)
- Tendremos que añadir el fichero 51-android.rules con los permisos y texto que figura a continuación:
root@juanda-PC:/etc/udev/rules.d# ls -l 51-android.rules -rw-r--r-- 1 root root 76 feb 24 11:33 51-android.rules root@juanda-PC:/etc/udev/rules.d# cat 51-android.rules SUBSYSTEM=="usb", ATTR{idVendor}=="ID_DISPOSITIVO", MODE="0666", GROUP="plugdev" root@juanda-PC:/etc/udev/rules.d#
- Tendremos que conocer el identificador del dispositivo (ID_DISPOSITIVO), así que conectamos el dispositivo y observamos las trazas del fichero de logs del sistema:
tail -100f /var/log/syslog Feb 24 11:12:27 juanda-PC kernel: [ 1918.767308] usb 3-1: new high-speed USB device number 6 using xhci_hcd Feb 24 11:12:27 juanda-PC mtp-probe: checking bus 3, device 6: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-1" Feb 24 11:12:27 juanda-PC kernel: [ 1918.784245] usb 3-1: ep 0x81 - rounding interval to 32768 microframes, ep desc says 0 microframes Feb 24 11:12:27 juanda-PC kernel: [ 1918.784252] usb 3-1: ep 0x83 - rounding interval to 32768 microframes, ep desc says 0 microframes Feb 24 11:12:27 juanda-PC kernel: [ 1918.784256] usb 3-1: ep 0x4 - rounding interval to 32768 microframes, ep desc says 0 microframes Feb 24 11:12:27 juanda-PC kernel: [ 1918.784796] scsi11 : usb-storage 3-1:1.0 Feb 24 11:12:27 juanda-PC mtp-probe: bus: 3, device: 6 was not an MTP device Feb 24 11:12:28 juanda-PC kernel: [ 1919.781950] scsi 11:0:0:0: Direct-Access Linux File-CD Gadget 0000 PQ: 0 ANSI: 2 Feb 24 11:12:28 juanda-PC kernel: [ 1919.782212] scsi 11:0:0:1: Direct-Access Linux File-CD Gadget 0000 PQ: 0 ANSI: 2 Feb 24 11:12:28 juanda-PC kernel: [ 1919.782607] sd 11:0:0:0: Attached scsi generic sg8 type 0
- De las trazas observamos que el dispositivo se conecta como bus:3, device: 6
- Ejecutamos lsusb para ver el vendor id del dispositivo, en nuestro caso 2207:0010:
juanda@juanda-PC:/etc/udev$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 003: ID 413c:2111 Dell Computer Corp. Bus 001 Device 004: ID 046d:c063 Logitech, Inc. DELL Laser Mouse Bus 004 Device 002: ID 059f:104a LaCie, Ltd Bus 002 Device 003: ID 058f:6362 Alcor Micro Corp. Flash Card Reader/Writer Bus 001 Device 006: ID 0cf3:e004 Atheros Communications, Inc. Bus 003 Device 006: ID 2207:0010
- Actualizamos el fichero anterior:
juanda@juanda-PC:/etc/udev/rules.d$ cat 51-android.rules SUBSYSTEM=="usb", ATTR{id_vendor}=="2207", MODE="0666", GROUP="plugdev"
- Reiniciamos el servicio de udev:
juanda@juanda-PC:/etc/udev/rules.d$ sudo service udev restart udev stop/waiting udev start/running, process 9069 juanda@juanda-PC:/etc/udev/rules.d$
- Paramos y arrancamos adb (android device bridge) y comprobamos la lista de dispositivos:
juanda@juanda-PC:/etc/udev/rules.d$ adb kill-server juanda@juanda-PC:/etc/udev/rules.d$ adb start-server * daemon not running. starting it now on port 5037 * * daemon started successfully * juanda@juanda-PC:/etc/udev/rules.d$ adb devices List of devices attached emulator-5554 device
Configuración del dispositivo
- En Android 4 la habilitación del USB Debug está en Ajustes > Opciones de Desarrollo.
- Nota: A partir de Android 4.2, las opciones de desarrollo no están visibles por defecto: "To make it available, go to Settings > About phone and tap Build number seven times. Return to the previous screen to find Developer options."
Usos más frecuents de adb
adb help
adb
provee numerosas funciones que se pueden ver en detalle mediante el comando:
adb help
- Veremos a continuación las más importantes
Comprobación comunicación
- Mediante el comando:
adb devices
- Si nos sale un número de serie, es que todo está correcto:
juanda@juanda-PC:~$ adb devices List of devices attached 01a927828f90ccde device juanda@juanda-PC:~$
Comunicación vía shell
- Mediante el comando:
adb shell
- Se pueden mandar comandos individuales de shell mediante:
adb shell <command_to_be_executed_on_the_device>
- Desde Android 4.2.2 se pide autorizar el acceso a cada ordenador desde una ventana emergente el el dispositivo movil.
- Si el terminal resulta pequeño podemos ejecutar el siguiente comando:
stty rows 60 cols 156
Transferencia de ficheros
-
adb push <local> <remote>
- Copiamos un fichero del ordenador al movil.
- Se pueden incluir tanto el path local como el remoto.
-
adb pull <remote> [<local>]
- Copiamos un fichero remoto (del movil) al PC.
Ver el fichero de log en tiempo real
-
adb logcat
- Devuelve una ingente cantidad de eventos escritos en diversos registros sobre el funcionamiento del sistema
- Es útil usar algún filtro o redirigir a un fichero.
Instalación de aplicaciones
-
adb install <file>
- Los ficheros (aplicaciones) deben tener extensión .apk
- Es necesario tener el side-load marcado.
-
adb install -r <file>
: Para actualizar - adb uninstall Aplicacion.apk: Para desinstalar
Reiniciar el dispositivo
adb reboot
adb reboot bootloader
adb reboot recovery
Error "Device not found"
- Se producen cuando adb no encuentra el dispositivo.
- Podemos reiniciar el servicio de adb:
adb kill-server adb start-server
- Hay que asegurarse que la opción USB debugging o Android Debug Bridge desde Ajustes->Herramientas de Desarrollo (varía un poco de versión a versión).
Errores habituales
- No se reconoce el dispositivo:
juanda@juanda-PC:~$ adb devices
List of devices attached
?????????? device
- False de permisos:
juanda@juanda-PC:~$ adb devices List of devices attached ???????????? no permissions juanda@juanda-PC:~$
- Driver incorrecto
- Configuración errónea fichero udev
- Reiniciar udev:
juanda@juanda-PC:/etc/udev/rules.d$ sudo service udev restart udev stop/waiting udev start/running, process 9069 juanda@juanda-PC:/etc/udev/rules.d$
- Reiniciar servicio adb:
adb kill-server adb start-server
Error en funcionamiento de dispositivos físicos y emuladores
- El error es el siguiente:
- [2013-02-22 13:55:20 - adb] Unexpected exception 'Cannot run program "/home/juanda/Android/sdk/platform-tools/adb": java.io.IOException: error=2, No existe el archivo o el directorio' while attempting to get adb version from '/home/juanda/Android/sdk/platform-tools/adb'
- Solución, instalar los siguientes paquetes:
sudo apt-get update sudo apt-get install ia32-libs
adb vía wifi
Primer método: desde el terminal
- Habilitar adb desde el terminal (debemos ser root):
setprop service.adb.tcp.port 5555
stop adbd
start adbd
- Para deshabilitarlo:
setprop service.adb.tcp.port -1
stop adbd
start adbd
2º método: desde el PC
- Desde un equipo, con acceso USB
adb tcpip 5555 adb connect <ip>:5555 *El puerto no hace falta, por defecto es el 5555 *Para volver a escuchar por USB: <source lang="bash" adb usb
- Primer método: hay que teclear mucho desde el movil, ¡muy pesado!
- Segundo método: hace falta llevar el cable usb, ¡una lata!
- Tercer método: Instalar una aplicación en el móvil: adbWireless, WiFi ADB o ADB WiFi. ¡Necesitan acceso root!
Eclipse y adb
- Si adb no está correctamente configurado desde Eclipse no funcionará.
- Indicar que queremos desplegarlo en el dispositivo al ejecutar la aplicación
- Cuando ejecutemos la aplicación veremos una pantalla similar a la siguiente:
- Eclipse->Windows->Open Perspective->DDMS
- Aparecerán los emuladores que tengamos corriendo y los dispositivos físicos que estén enchufados a la entrada USB del PC
- En caso de tener un solo dispositivo disponible esta pantalla no aparecerá.
Ejemplos uso terminal Linux en en Android
Actualización fichero /etc/hosts
- El comando para ver las interfaces del movil es netcfg (no ifconfig)
- El fichero hosts se encuentra en /system/etc/hosts
- Obtenemos el fichero hosts del movil para modificarlo:
juanda@dpto-01:~/Android/sdk/tools$ adb pull /etc/hosts 0 KB/s (25 bytes in 0.038s) juanda@dpto-01:~/Android/sdk/tools$ cat hosts 127.0.0.1 localhost
- Añado una o varias entradas en el fichero pero hay un error al hacer el push:
juanda@dpto-01:~/Android/sdk/tools$ vi hosts juanda@dpto-01:~/Android/sdk/tools$ cat hosts 127.0.0.1 localhost 192.168.1.1 incidencias.jd www.incidencias.jd 192.168.1.1 spp.jd www.spp.jd juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts failed to copy 'hosts' to '/etc/hosts': Read-only file system juanda@dpto-01:~/Android/sdk/tools$
- En muchos dispositivos la partición /system se monta como solo lectura así que hay que montarla con permisos de escritura.
- A continuación todas las trazas al cambiarlo en mi sistema:
juanda@dpto-01:~/Android/sdk/tools$ adb shell shell@android:/ $ su - shell@android:/ # mount -o rw,remount /system shell@android:/ # exit shell@android:/ $ exit juanda@dpto-01:~/
- La partición ya tiene permisos de lectura, hacemos el push:
juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts failed to copy 'hosts' to '/etc/hosts': Permission denied juanda@dpto-01:~/
- ¡Vaya! Ahora fallan los permisos....
- Cambiamos permisos fichero /etc/hosts para su sustitución:
juanda@dpto-01:~/Android/sdk/tools$ adb shell shell@android:/ $ cd etc shell@android:/etc $ su - shell@android:/system/etc # chmod 777 hosts shell@android:/system/etc # exit shell@android:/etc $ exit juanda@dpto-01:~/Android/sdk/tools$ adb push hosts /etc/hosts 2 KB/s (103 bytes in 0.040s) juanda@dpto-01:~/Android/sdk/tools$
- Comprobamos que todo ha ido bien y ponemos todo como estaba:
juanda@dpto-01:~/Android/sdk/tools$ adb shell shell@android:/ $ su - shell@android:/ # cd etc shell@android:/etc # chmod 644 hosts shell@android:/etc # ls -l hosts -rw-r--r-- root root 103 2013-04-12 13:00 hosts shell@android:/etc # mount -o ro,remount /system shell@android:/etc # cat hosts 127.0.0.1 localhost 192.168.1.1 incidencias.jd www.incidencias.jd 192.168.1.1 spp.jd www.spp.jd shell@android:/etc #