Los ficheros system.img que utiliza el emulador de Android para arquitecturas ARM están en formato YAFFS2. Si queremos modificar dichas imágenes para incluir, por ejemplo, las Google Apps, podemos seguir los siguientes pasos para desempaquetar/modificar/reempaquetar dicha imagen.
Preparación
Antes de nada, necesitamos tener en nuestro sistema un par de herramientas:
- Yaffs (Yet Another Flash File System): es un sistema de archivos open-source diseñado especialmente para ser rápido, robusto y adecuado para su uso en sistema embebidos Flash NAND o NOR. De todo el paquete, nos interesa la utilidad mkyaffs2image, que nos permite crear una imagen YAFF2 a partir del contenido de un directorio.
La podemos copilar siguiendo las instrucciones de http://www.yaffs.net/preparing-build-linux-yaffs (también la tendremos ya si hemos construido una ROM).
O podemos usar una versión precompilada de alguno de los siguiente enlaces:
- unyaffs: Utilizar que permite extraer imágenes de sistema creadas por mkyaffs2image.
La podemos compilar:
$ wget http://unyaffs.googlecode.com/files/unyaffs.c
$ wget http://unyaffs.googlecode.com/files/unyaffs.h
$ gcc -o unyaffs unyaffs.cO podemos usar una versión precompilada desde:
Extracción de system.img
~/work/redo_system$ cp $ANDROID_HOME/add-ons/addon-google_apis-google_inc_-14/images/armeabi-v7a/* .
~/work/redo_system$ mkdir unpacked
~/work/redo_system$ cd unpacked/
~/work/redo_system/unpacked$ unyaffs ../system.img
Modificación/Inclusión de aplicaciones
~/work/redo_system/unpacked$ cd app
~/work/redo_system/unpacked/app$ cp ~/work/gapps-jb-20121011-signed/system/app/Phonesky.apk .
~/work/redo_system/unpacked/app$ cp ~/work/gapps-jb-20121011-signed/system/app/GoogleServicesFramework.apk .
~/work/redo_system/unpacked/app$ cp ~/work/gapps-jb-20121011-signed/system/app/GoogleLoginService.apk .
Reconstrucción de system.img
~/work/redo_system/unpacked/app$ cd ../..
~/work/redo_system$ rm system.img
~/work/redo_system$ mkyaffs2image unpacked system.img
Apuntar nuestro AVD a nuestra nueva imágen
~/work/redo_system$ nano ~/.android/avd/jb.avd/config.ini
image.sysdir.1=/home/rubensa/work/redo_system/
NOTA: Al usar esta nueva versión de system.img en el emulador es conveniente eliminar los archivos cache.img, userdata.img y userdata-qemu.img del AVD ya que estos podrían no ser ya compatibles con la nueva imagen del sistema.