Diferencia entre revisiones de «Usuario:Juanda/android/emulador»
De WikiEducator
(→AVD) |
(→Pasos preliminares) |
||
(39 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: | ||
+ | <source lang="bash"> | ||
juanda@juanda-PC:~/Android/sdk/system-images/android-17/x86$ ls | juanda@juanda-PC:~/Android/sdk/system-images/android-17/x86$ ls | ||
build.prop NOTICE.txt source.properties userdata.img | build.prop NOTICE.txt source.properties userdata.img | ||
kernel-qemu ramdisk.img system.img | kernel-qemu ramdisk.img system.img | ||
− | + | </source> | |
+ | </div> | ||
+ | <div class="slide"> | ||
+ | *Cada vez que creamos un AVD nuevo, copia sus imágenes en un directorio de usuario: | ||
+ | <source lang="bash"> | ||
juanda@juanda-PC:~/.android/avd/htcdesire.avd$ ls -l | juanda@juanda-PC:~/.android/avd/htcdesire.avd$ ls -l | ||
total 542492 | total 542492 | ||
Línea 29: | Línea 38: | ||
-rw------- 1 juanda juanda 45346716 abr 20 02:44 userdata-qemu.img | -rw------- 1 juanda juanda 45346716 abr 20 02:44 userdata-qemu.img | ||
juanda@juanda-PC:~/.android/avd/htcdesire.avd$ | juanda@juanda-PC:~/.android/avd/htcdesire.avd$ | ||
+ | </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 00:12 23 may 2013