Diferencia entre revisiones de «Usuario:Juanda/android/emulador»

De WikiEducator
Saltar a: navegación, buscar
(Pasos preliminares)
 
(34 revisiones intermedias por el mismo usuario no mostrado)
Línea 40: Línea 40:
 
</source>
 
</source>
 
</div>
 
</div>
 +
 +
 +
 
<div class="slide">
 
<div class="slide">
*Teclas de acceso rápido:
+
====Teclas rápidas====
 +
*Son muchas... las más importantes:
 
:Inicio: Tecla Home.
 
:Inicio: Tecla Home.
:F2: Tecla Menú.
 
 
:Esc: Tecla de volver.
 
:Esc: Tecla de volver.
:F7: Tecla On/Off
+
:'''Ctrl-F11''': Cambia la orientación entre horizontal y vertical.
:Ctrl-F5/Ctrl-F6 óKeyPad +/-: Control de volumen de audio.
+
:'''Ctrl-F11''' ó KeyPad 7: 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.  
*Debemos marcar snapshots para acelerarlo.
 
 
*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 aceleración de máquinas virtuales mediante KVM (Kernel-based virtual machine).  
 
*Puede ir más rápido también mediante aceleración de máquinas virtuales mediante KVM (Kernel-based virtual machine).  
Línea 60: Línea 249:
 
: -[http://developer.android.com/tools/devices/emulator.html Configuración en Eclipse]
 
: -[http://developer.android.com/tools/devices/emulator.html Configuración en Eclipse]
 
*Ojo KVM con VmWare y VirtualBox pueden no llevarse del todo bien
 
*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">
 +
$ virsh -c qemu:///system list
 +
Id Name                State
 +
----------------------------------
  
====Indicar que queremos desplegarlo en el dispositivo al ejecutar la aplicación====
+
$
*Cuando ejecutemos la aplicación veremos una pantalla similar a la siguiente:
+
</source>
:Eclipse->Windows->Open Perspective->DDMS
+
*En la configuración del emulador:
*Aparecerán los emuladores que tengamos corriendo y los dispositivos físicos que estén enchufados a la entrada USB del PC
+
: Eclipse: Run -> Run Configurations -> Target -> Additional Emulator Command Line Options: "-qemu -m 512 -enable-kvm"
*En caso de tener un solo dispositivo disponible esta pantalla no aparecerá.
+
: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


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)