Curso de Android

De WikiEducator
< Usuario:Juanda
Revisión a fecha de 00:12 23 may 2013; Juanda (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar


AVD

  • Android Virtual Devices
  • Interfaz gráfica para crear dispositivos Android
  • Se ejecuta desde el icono de eclipse o mediante el comando:
juanda@juanda-PC:~/Android/sdk/tools$ android avd
Descargar video
  • El sdk guarda imágenes del sistema para los AVD:
juanda@juanda-PC:~/Android/sdk/system-images/android-17/x86$ ls
build.prop   NOTICE.txt   source.properties  userdata.img
kernel-qemu  ramdisk.img  system.img
  • Cada vez que creamos un AVD nuevo, copia sus imágenes en un directorio de usuario:
juanda@juanda-PC:~/.android/avd/htcdesire.avd$ ls -l
total 542492
-rw------- 1 juanda juanda     16860 abr 20 02:43 cache.img
-rw-rw-r-- 1 juanda juanda       549 abr 15 21:30 config.ini
-rw-rw-r-- 1 juanda juanda        51 abr 20 02:44 emulator-user.ini
-rw-rw-r-- 1 juanda juanda      1280 abr 20 02:43 hardware-qemu.ini
-rw-rw-r-- 1 juanda juanda 506134528 abr 20 02:44 snapshots.img
-rw-rw-r-- 1 juanda juanda      1279 abr 20 02:44 snapshots.img.default-boot.ini
-rw-rw-r-- 1 juanda juanda   4048704 abr 15 21:30 userdata.img
-rw------- 1 juanda juanda  45346716 abr 20 02:44 userdata-qemu.img
juanda@juanda-PC:~/.android/avd/htcdesire.avd$


Teclas rápidas

  • Son muchas... las más importantes:
Inicio: Tecla Home.
Esc: Tecla de volver.
Ctrl-F11: Cambia la orientación entre horizontal y vertical.
Alt-Intro: Visualiza el emulador a pantalla completa.

Simulaciones del entorno

  • Falta de batería, tráfico de red, llamadas o sms, posición geográfica...
  • Cada instancia del emulador utiliza dos puertos, el del adb (por defecto 5555) y uno inferior de consola.
  • Podemos ver el puerto de consola mediante el comando adb devices
  • Se accede mediante telnet localhost <console-port>
juanda@dpto-01:~/Android/sdk$ adb devices
List of devices attached 
emulator-5554	device
 
juanda@dpto-01:~/Android/sdk$ telnet localhost 5554
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
gsm call 696797518
OK

Más información de comandos

Configuración del emulador

Pasos preliminares

  • Descargamos la plataforma SDK sobre la que vaya a funcionar el navegador mediante el SDK Manager: en este caso elegiremos la 2.2
  • Descargamos los ficheros para la práctica
  • Damos de alta un nuevo dispositivo Android (observa que se crea en color verde).
  • Vamos a crear nuestro dispositivo AVD (Android Virtual Device) a partir del dispositivo anterior y lo llamaremos "prueba"
  • Arrancamos el dispositivo
  • Comprobamos que tenemos acceso al dispositivo mediante adb:
juanda@dpto-01:~/Android/eclipse$ adb devices
List of devices attached 
emulator-5554	device
 
juanda@dpto-01:~/Android/eclipse$ adb shell
#


Carencias del emulador

  • Faltan comandos (por ejemplo find o el editor vi).
  • Falta el Play Store
  • Faltan las APIs de Google
  • ¿Espacio en partición /system?
  • Al apagar el emulador lo que haya instalado en la partición system desaparece
  • El emulador va más lento que un desfile de cojos

Aumentar la partición system

  • Al instalar cosas en el emulador en el /system, por defecto puede venir lleno, por lo que debemos cambiar el tamaño de la partición al arrancar:
juanda@juanda-PC:~/Descargas/kk$ emulator -avd nexus4jd -partition-size 400
  • Comprobamos que el tamaño de la partición haya cambiado:
root@android:/ # df
Filesystem             Size   Used   Free   Blksize
/dev                   410M    32K   410M   4096
/mnt/secure            410M     0K   410M   4096
/mnt/asec              410M     0K   410M   4096
/mnt/obb               410M     0K   410M   4096
/system                388M   198M   189M   4096
/data                  194M    11M   182M   4096
/cache                  64M     1M    62M   4096
root@android:/ #

Instalación de comandos adicionales

  • Observa la estructura de directorios y los ejecutables que faltan
  • Para instalar nuevos comandos (en /system/bin) se debe tener acceso con lectura y escritura a la partición.
  • Utilizaremos busybox para instalar los comandos
  • Miramos el tipo de partición de system y el dispositivo que utiliza para hacer un re-mount:
juanda@dpto-01:~/Android/eclipse$ adb shell
# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
# 
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system
  • Comprobamos que la partición system tenga escritura:
- Haciendo un mount
- Subiendo un fichero mediante push
-...
  • Instalamos la aplicación SuperUser que se encarga de dar permisos de root a las aplicaciones:
juanda@dpto-01:~/Android$ adb install Superuser.apk 
4023 KB/s (1468798 bytes in 0.356s)
	pkg: /data/local/tmp/Superuser.apk
Success
juanda@dpto-01:~/Android$
  • Observamos en el emulador que está instalada y se ejecuta con normalidad
  • Instalamos la aplicación BusyBox que tiene un conjunto de comandos útiles de Linux.
juanda@dpto-01:~/Android$ adb install BusyBox.apk 
4034 KB/s (3235962 bytes in 0.783s)
	pkg: /data/local/tmp/BusyBox.apk
Success
juanda@dpto-01:~/Android$
  • Una vez instalada se debe ejecutar para que se termine la instalación, son necesarios permisos de root.
  • Comprobamos el correcto funcionamiento
  • No funciona porque falta de instalar su

Busybox-error.png

  • Instalamos su:
juanda@dpto-01:~/Android$ adb push su /system/xbin/su
3728 KB/s (380532 bytes in 0.099s)
juanda@dpto-01:~/Android$ adb shell chmod 06755 /system/xbin/su
juanda@dpto-01:~/Android$ adb shell
  • Terminamos la instalación del BusyBox y comprobamos si funciona:

Generación de imagen de system

  • Si queremos que las modificaciones que hemos hecho en el system sean persistentes, debemos generar una imagen de la partición
  • Para generar una imagen nos hará falta el ejecutable mkfs.yaffs2.
  • En este caso utilizaremos el arm pero también existe para x86:
-mkfs.yaffs2 para x86
-mkfs.yaffs2 para arm
juanda@dpto-01:~/Android$ adb push mkfs.yaffs2.arm /data/
juanda@dpto-01:~/Android$ adb shell
# cd /data
#chmod 777 mkfs.yaffs2.armt+found
  • Generamos la imagen y nos lo llevamos al pc:
# ./mkfs.yaffs2.arm /system /data/system.img
mkfs.yaffs2: Android YAFFS2 Tool,Build by PowerGUI 
	    at http://www.openhandsetalliance.org.cn
Building...
Build Ok.
# exit
juanda@dpto-01:~/Android$ adb pull /data/system.img
4579 KB/s (82621440 bytes in 17.620s)
juanda@dpto-01:~/Android$

Optimización del emulador

  • Por defecto, el emulador va más lento que un desfile de cojos.
  • Si está disponible (Intel va con algo de retardo a veces), resulta más útil utilizar un emulador con Intel (haz un wipe user data la primera vez que lo uses, sino, ¿se queda colgado?)
  • Puede ir más rápido también mediante aceleración de máquinas virtuales mediante KVM (Kernel-based virtual machine).
-Instalación.
-Configuración en Eclipse
  • Ojo KVM con VmWare y VirtualBox pueden no llevarse del todo bien
  • La aceleración del emulador para Windows se hace directamente desde el SDK Manager.

Instalación de KVM

  • Comprobamos que la máquina soporte aceleración de hardware (valor superior a 0):
juanda@dpto-01:~$ egrep -c '(vmx|svm)' /proc/cpuinfo
2
juanda@dpto-01:~$
  • Instalamos kvm:
$ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
$ sudo adduser `id -un` libvirtd
Adding user '<username>' to group 'libvirtd' ...
  • Cerramos sesión y volvemos a entrar. Debemos ejecutar el siguiente comando para ver que esté bien instalado:
$ virsh -c qemu:///system list
 Id Name                 State
----------------------------------
 
$
  • En la configuración del emulador:
Eclipse: Run -> Run Configurations -> Target -> Additional Emulator Command Line Options: "-qemu -m 512 -enable-kvm"
Terminal:
emulator -avd <avd_name> -qemu -m 512 -enable-kvm
  • Tiempos carga desde ordenador Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz
emulador ARM: 1,10 a 1,20 (10 segundos menos sin boot animation)
emulador x86: 15-18 segundos
emulador x86 con virtualización kvm: 15-18 segundos
  • Debemos marcar snapshots para acelerarlo (no es compatible con la opción de emulación de GPU)