Diferencia entre revisiones de «Usuario:Juanda/android/emulador»
De WikiEducator
(→AVD) |
(→Pasos preliminares) |
||
| (38 revisiones intermedias por el mismo usuario no mostrado) | |||
| Línea 2: | Línea 2: | ||
{{#widget:Slides}} {{MiTitulo| Curso de Android}} | {{#widget:Slides}} {{MiTitulo| Curso de Android}} | ||
<div class="slides layout-regular template-default"> | <div class="slides layout-regular template-default"> | ||
| + | <div class="slide"> | ||
=Uso del emulador en Android= | =Uso del emulador en Android= | ||
| + | </div> | ||
<div class="slide"> | <div class="slide"> | ||
| − | ===AVD=== | + | ====AVD==== |
*Android Virtual Devices | *Android Virtual Devices | ||
*Interfaz gráfica para crear dispositivos Android | *Interfaz gráfica para crear dispositivos Android | ||
| Línea 11: | Línea 13: | ||
juanda@juanda-PC:~/Android/sdk/tools$ android avd | juanda@juanda-PC:~/Android/sdk/tools$ android avd | ||
</source> | </source> | ||
| − | *[http://www.youtube.com/watch?feature=player_embedded&v=k2Ly6O9LlPw Video sobre como crear dispositivos AVD] [http://www.media.formandome.es/android/avd.webm Descargar video] | + | *[http://www.youtube.com/watch?feature=player_embedded&v=k2Ly6O9LlPw Video sobre como crear dispositivos AVD] |
| − | + | :[http://www.media.formandome.es/android/avd.webm Descargar video] | |
| + | </div> | ||
| + | <div class="slide"> | ||
*El sdk guarda imágenes del sistema para los AVD: | *El sdk guarda imágenes del sistema para los AVD: | ||
<source lang="bash"> | <source lang="bash"> | ||
| Línea 19: | Línea 23: | ||
kernel-qemu ramdisk.img system.img | kernel-qemu ramdisk.img system.img | ||
</source> | </source> | ||
| − | + | </div> | |
| + | <div class="slide"> | ||
*Cada vez que creamos un AVD nuevo, copia sus imágenes en un directorio de usuario: | *Cada vez que creamos un AVD nuevo, copia sus imágenes en un directorio de usuario: | ||
<source lang="bash"> | <source lang="bash"> | ||
| Línea 34: | Línea 39: | ||
juanda@juanda-PC:~/.android/avd/htcdesire.avd$ | juanda@juanda-PC:~/.android/avd/htcdesire.avd$ | ||
</source> | </source> | ||
| + | </div> | ||
| − | + | ||
| + | <div class="slide"> | ||
| + | ====Teclas rápidas==== | ||
| + | *Son muchas... las más importantes: | ||
:Inicio: Tecla Home. | :Inicio: Tecla Home. | ||
| − | |||
:Esc: Tecla de volver. | :Esc: Tecla de volver. | ||
| − | : | + | :'''Ctrl-F11''': Cambia la orientación entre horizontal y vertical. |
| − | + | ||
| − | + | ||
:Alt-Intro: Visualiza el emulador a pantalla completa. | :Alt-Intro: Visualiza el emulador a pantalla completa. | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
| + | |||
| + | ====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> | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | <source lang="bash"> | ||
| + | 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 | ||
| + | </source> | ||
| + | [http://developer.android.com/tools/devices/emulator.html Más información de comandos] | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | |||
| + | ==Configuración del emulador== | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | ====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 | ||
| + | *[http://www.media.formandome.es/android/practica_emulador.tar.gz 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 | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | *Comprobamos que tenemos acceso al dispositivo mediante adb: | ||
| + | <source lang="bash"> | ||
| + | juanda@dpto-01:~/Android/eclipse$ adb devices | ||
| + | List of devices attached | ||
| + | emulator-5554 device | ||
| + | |||
| + | juanda@dpto-01:~/Android/eclipse$ adb shell | ||
| + | # | ||
| + | </source> | ||
| + | </div> | ||
| + | |||
| + | |||
| + | <div class="slide"> | ||
| + | |||
| + | ====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 | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | |||
| + | ====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: | ||
| + | <source lang="bash"> | ||
| + | juanda@juanda-PC:~/Descargas/kk$ emulator -avd nexus4jd -partition-size 400 | ||
| + | </source> | ||
| + | *Comprobamos que el tamaño de la partición haya cambiado: | ||
| + | <source lang="bash"> | ||
| + | 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:/ # | ||
| + | </source> | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | |||
| + | ====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 | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | *Miramos el tipo de partición de system y el dispositivo que utiliza para hacer un re-mount: | ||
| + | <source lang="bash"> | ||
| + | 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 | ||
| + | </source> | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | *Comprobamos que la partición system tenga escritura: | ||
| + | :- Haciendo un mount | ||
| + | :- Subiendo un fichero mediante push | ||
| + | :-... | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | *Instalamos la aplicación SuperUser que se encarga de dar permisos de root a las aplicaciones: | ||
| + | <source lang="bash"> | ||
| + | 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$ | ||
| + | </source> | ||
| + | *Observamos en el emulador que está instalada y se ejecuta con normalidad | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | *Instalamos la aplicación BusyBox que tiene un conjunto de comandos útiles de Linux. | ||
| + | <source lang="bash"> | ||
| + | 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$ | ||
| + | </source> | ||
| + | *Una vez instalada se debe ejecutar para que se termine la instalación, son necesarios permisos de root. | ||
| + | *Comprobamos el correcto funcionamiento | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | *No funciona porque falta de instalar su | ||
| + | [[Archivo:Busybox-error.png|500px]] | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | *Instalamos su: | ||
| + | <source lang="bash"> | ||
| + | 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 | ||
| + | </source> | ||
| + | *Terminamos la instalación del BusyBox y comprobamos si funciona: | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | |||
| + | ====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: | ||
| + | :-[http://code.google.com/p/android-group-korea/downloads/detail?name=mkfs.yaffs2.x86 mkfs.yaffs2 para x86] | ||
| + | :-[http://code.google.com/p/android-group-korea/downloads/detail?name=mkfs.yaffs2.arm mkfs.yaffs2 para arm] | ||
| + | <source lang="bash"> | ||
| + | juanda@dpto-01:~/Android$ adb push mkfs.yaffs2.arm /data/ | ||
| + | juanda@dpto-01:~/Android$ adb shell | ||
| + | # cd /data | ||
| + | #chmod 777 mkfs.yaffs2.armt+found | ||
| + | </source> | ||
| + | </div> | ||
| + | <div class="slide"> | ||
| + | *Generamos la imagen y nos lo llevamos al pc: | ||
| + | <source lang="bash"> | ||
| + | # ./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$ | ||
| + | </source> | ||
| + | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | |||
====Optimización del emulador==== | ====Optimización del emulador==== | ||
*Por defecto, el emulador va más lento que un desfile de cojos. | *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?) | *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 KVM (Kernel-based virtual machine). [https://help.ubuntu.com/community/KVM/Installation Instalación]. [http://developer.android.com/tools/devices/emulator.html Configuración en Eclipse] | + | *Puede ir más rápido también mediante aceleración de máquinas virtuales mediante KVM (Kernel-based virtual machine). |
| − | *Ojo KVM con VmWare y VirtualBox pueden no llevarse del todo bien. | + | : -[https://help.ubuntu.com/community/KVM/Installation Instalación]. |
| + | : -[http://developer.android.com/tools/devices/emulator.html 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. | ||
</div> | </div> | ||
| + | <div class="slide"> | ||
| + | ====Instalación de KVM==== | ||
| + | *Comprobamos que la máquina soporte aceleración de hardware (valor superior a 0): | ||
| + | <source lang="bash"> | ||
| + | juanda@dpto-01:~$ egrep -c '(vmx|svm)' /proc/cpuinfo | ||
| + | 2 | ||
| + | juanda@dpto-01:~$ | ||
| + | </source> | ||
| + | *Instalamos kvm: | ||
| + | <source lang="bash"> | ||
| + | $ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils | ||
| + | $ sudo adduser `id -un` libvirtd | ||
| + | Adding user '<username>' to group 'libvirtd' ... | ||
| + | </source> | ||
| + | </div> | ||
<div class="slide"> | <div class="slide"> | ||
| − | + | *Cerramos sesión y volvemos a entrar. Debemos ejecutar el siguiente comando para ver que esté bien instalado: | |
| − | * | + | <source lang="bash"> |
| − | :Eclipse-> | + | $ virsh -c qemu:///system list |
| − | + | Id Name State | |
| − | + | ---------------------------------- | |
| + | |||
| + | $ | ||
| + | </source> | ||
| + | *En la configuración del emulador: | ||
| + | : Eclipse: Run -> Run Configurations -> Target -> Additional Emulator Command Line Options: "-qemu -m 512 -enable-kvm" | ||
| + | :Terminal: | ||
| + | :<source lang="bash"> | ||
| + | emulator -avd <avd_name> -qemu -m 512 -enable-kvm | ||
| + | </source> | ||
</div> | </div> | ||
| + | |||
| + | <div class="slide"> | ||
| + | *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) | ||
| + | </div> | ||
| + | |||
</div> | </div> | ||
Última revisión de 11:12 22 may 2013