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 Error driver
- 1.4.10 Error no permissions
- 1.4.11 Error en funcionamiento de dispositivos físicos y emuladores
- 1.5 adb vía wifi
- 1.6 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.
- Puedes encontrar un driver genérico que se encuentra en la carpeta android-sdk-windows\usb_driver del SDK Android. Aunque lo más probable es que tengas que utilizar el driver del fabricante.
- En la web de Android hay un listado de enlaces para la descarga de los drivers de los principales fabricantes.
- Para los que no aparecen habrá que ir a sus webs o contactar con su servicio de soporte.
- A veces también hace falta otro ejecutable adb distinto al que aparece en el Android SDK.
- No siempre existen los drivers o funcionan como debieran ¡ojo!
- En ocasiones para que funcione se utiliza el driver de google 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."
Desde Eclipse
- 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á.
Usos más frecuents de adb
adb help
adbprovee 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 rebootadb reboot bootloaderadb 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).
Error driver
- No se reconoce el dispositivo:
juanda@juanda-PC:~$ adb devices List of devices attached ?????????? device juanda@juanda-PC:~$
- Reiniciar servicio adb:
adb kill-server adb start-server
Error no permissions
juanda@juanda-PC:~$ adb devices List of devices attached ???????????? no permissions juanda@juanda-PC:~$
- Driver incorrecto
- Configuración fichero udev
- 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
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: <source lang="bash"> 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 #