martes, 6 de marzo de 2012

Android: Emular tarjeta SD con Eclipse

Muchas veces no tenes un dispositivo a mano para poder desplegar nuestra aplicación, por lo que tenemos que usar el emular para ir depurando. Y en alguno de esos caso necesitamos depurar el acceso a una tarjeta SD. Para poder emular una tarjeta SD hay que crear una imagen, montarla, copiar el contenido y finalmente usarla con el emulador.

Creando la imagen
El SDK de Android contiene varias herramientas una de ellas es mksdcard, de la ayuda del ejecutable podemos ver:

mksdcard: create a blank FAT32 image to be used with the Android emulator.
usage: mksdcard [-l label] <size> <file>
if <size> is a simple integer, it specifies a size in bytes
if <size> is an integer followed by 'K', it specifies a size in KiB
if <size> is an integer followed by 'M', it specifies a size in MiB
if <size> is an integer followed by 'G', it specifies a size in GiB
Minimum size is 9M. The Android emulator cannot use smaller images.
Maximum size is 1099511627264 bytes, 1073741823K, 1048575M or 1023G

Sino tenemos el SDK de android como variable de entorno nos desplazamos a android-sdk-linux/tools y ejecutamos

./mksdcard 512M droidcard

Montando la tarjeta en Linux
Una de las maneras de pasar ficheros a la tarjeta es haciendo un push mediante adb pero para mi gusto es mas fácil montar la tarjeta y copiar todo lo queramos como si fuera una carpeta mas. Para eso es necesario crear un punto de montaje para luego poder montar la tarjeta.


sudo mkdir /media/droidcard
sudo mount -o loop droidcard /media/droidcard


Nota: el nombre del fichero de la tarjeta no tiene porque coincidir con el punto de montaje.

Agregando ficheros a la tarjeta
A estas alturas ya podríamos estar copiando (como root) cosas a nuestra tarjeta sin ningún problema. Una vez terminado hay que desmontarla para poder usarla con el emulador.

sudo umount /media/droidcard

Usando la tarjeta en el emulador

En Eclipse dentro de Run configuration, vamos a la opción target, y en Additional configuration command line options agregamos el siguiente comando:


-sdcard /ruta/a/tu/tarjeta

Y listo, eso es todo.