Diferencia entre revisiones de «Usuario:Juanda/android/emulador»
De WikiEducator
(→Pasos preliminares) |
(→Pasos preliminares) |
||
(17 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 41: | Línea 41: | ||
</div> | </div> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<div class="slide"> | <div class="slide"> | ||
Línea 70: | Línea 53: | ||
<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== | ==Configuración del emulador== | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
====Pasos preliminares==== | ====Pasos preliminares==== | ||
− | *Descargamos la plataforma SDK sobre la que vaya a funcionar el navegador: en este caso elegiremos la 2.2 | + | *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). | *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" | *Vamos a crear nuestro dispositivo AVD (Android Virtual Device) a partir del dispositivo anterior y lo llamaremos "prueba" | ||
− | * | + | *Arrancamos el dispositivo |
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
− | *Comprobamos que tenemos acceso | + | *Comprobamos que tenemos acceso al dispositivo mediante adb: |
<source lang="bash"> | <source lang="bash"> | ||
juanda@dpto-01:~/Android/eclipse$ adb devices | juanda@dpto-01:~/Android/eclipse$ adb devices | ||
Línea 100: | Línea 111: | ||
*¿Espacio en partición /system? | *¿Espacio en partición /system? | ||
*Al apagar el emulador lo que haya instalado en la partición system desaparece | *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> | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
====Aumentar la partición system==== | ====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: | *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 | juanda@juanda-PC:~/Descargas/kk$ emulator -avd nexus4jd -partition-size 400 | ||
− | + | </source> | |
*Comprobamos que el tamaño de la partición haya cambiado: | *Comprobamos que el tamaño de la partición haya cambiado: | ||
+ | <source lang="bash"> | ||
root@android:/ # df | root@android:/ # df | ||
Filesystem Size Used Free Blksize | Filesystem Size Used Free Blksize | ||
Línea 124: | Línea 137: | ||
<div class="slide"> | <div class="slide"> | ||
+ | |||
====Instalación de comandos adicionales==== | ====Instalación de comandos adicionales==== | ||
*Observa la estructura de directorios y los ejecutables que faltan | *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. | *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 | *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"> | <source lang="bash"> | ||
juanda@dpto-01:~/Android/eclipse$ adb shell | juanda@dpto-01:~/Android/eclipse$ adb shell | ||
Línea 146: | Línea 162: | ||
# mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system | # mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system | ||
</source> | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
*Comprobamos que la partición system tenga escritura: | *Comprobamos que la partición system tenga escritura: | ||
:- Haciendo un mount | :- Haciendo un mount | ||
:- Subiendo un fichero mediante push | :- 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> | ||
+ | <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"> | <div class="slide"> | ||
+ | |||
+ | ====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). | ||
+ | : -[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 class="slide"> | ||
+ | |||
====Instalación de KVM==== | ====Instalación de KVM==== | ||
*Comprobamos que la máquina soporte aceleración de hardware (valor superior a 0): | *Comprobamos que la máquina soporte aceleración de hardware (valor superior a 0): | ||
Línea 188: | Línea 285: | ||
</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