Compilando Android, paso a paso

Compilando Android, paso a paso
Facebook Twitter Flipboard E-mail

Hace poco tiempo que tengo mi primer móvil con Android. La inquietud me pudo y tardé poco en resistirme a jugar peligrosamente con las ROMs personalizadas, cambiar el boot, trastear con adb y, por último, meter un recovery. Todo esto lo fui haciendo por fases, en distintos PCs y portátiles, hasta que decidí probar a recuperar todo como venía de fábrica y empezar de nuevo, sabiendo esta vez mejor donde tocar y cómo.

Todo el proceso lo hice desde mi portatil personal esta vez, con Debian Squeeze amd64, y cual fue mi sorpresa cuando descubrí que el comando “fastboot” no estaba disponible, comando que se encuentra en el SDK de Android para Windows sin problemas. Así que comencé a investigar cómo conseguirlo y encontré que tenía dos opciones: me bajaba el binario o compilaba los fuentes de Android. Opté por esta última, en este mes de hacking no se me había pasado por la cabeza intentarlo y he empezado hace media hora. En este post iré describiendo los pasos que voy siguiendo y los problemas que me voy encontrando, por si alguien más se anima.

Preparando el entorno

Lo primero que necesitamos es un directorio donde meter todo, que por lo que voy leyendo parecen ser muchos ficheros y mucho espacio, casi 4 gigas 5.3 gigas para las fuentes y dicen que más de 6 gigas 9.5 gigas para compilar (datos corregidos después del proceso). Esto empieza a asustar, ¿cómo es posible que ocupe tanto espacio? ¿qué han metido ahí? Dentro de poco saldremos de dudas.

$ mkdir android

$ cd android

Ahora tenemos que configurar “git”. Si no lo tenemos instalado sólo tendremos que usar nuestro gestor de paquetes y hacerlo (en el caso de debian bastaría con un “apt-get install git”). Para configurarlo tendremos que decir quiénes somos, así que tendremos preparado un email y un nombre.

$ git config —global user.email “usuariodemo@genbetadev.com”

$ git config —global user.name “TuUsuario”

Una vez tengamos esto inicializamos el repositorio usando “repo”. Yo no tenía “repo” instalado, así que busqué por apt-cache y mil sitios sin éxito, hasta que encontré que era un script en Python y debía bajarlo, así que usé curl y lo guardé en mi directorio “bin” sito en mi home dentro del path:

$ curl http://android.git.kernel.org/repo >~/bin/repo

Trabajando con repo

Ahora ya estamos listos para inicializar el repositorio. Como no quería todas las versiones de Android, seleccioné únicamente la más actual: gingerbread.

$ repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread

Your Name [TuUsuario]:
Your Email [usuariodemo@genbetadev.com]:

Your identity is: TuUsuario
is this correct [y/n]? y

Después de algo de texto por consola donde se nos informa si todo ha ido bién, ejecutamos el siguiente comando y nos vamos. De verdad, te da tiempo casi a ver una peli si quieres porque esto tarda mucho.

$repo sync

¿Qué tal esa peli? ¿Bien? Pues estamos listos para el siguiente paso.
Ahora debemos tener estos directorios y ficheros en el raiz, ocupando unos bonitos 5.3 gigas.

nacho@fraguelrock:~/android$ ls

bionic cts device hardware ndk sdk

bootable dalvik external libcore packages system

build development frameworks Makefile prebuilt

Instalando las dependencias y compilando

Ahora toca compilar, y para que no os pase como a mi, sabed que es necesario tener instalado “bison”, “zlib”, “zip”,“flex”,“ncurses”,“gperf” y “g++-multilib”:

sudo aptitude install bison g++-multilib zlib1g-dev lib32z1-dev zip flex lib32ncurses5-dev libncurses5-dev gperf

Ahora sí podemos empezar

nacho@fraguelrock:~/android$ make

Como nota al margen, destacar la gran cantidad de warnings que dispara la compilación, es algo que tendría que mirarse porque da una impresión mala y de poca seguridad. Tipos de datos que no coinciden parece ser lo más popular, aunque no faltan los “deprecated” de turno, muchos “fichero no encontrado” y “variable usada sin inicializar”. En todo caso, el famoso tweet de Andy Rubin es totalmente cierto, aunque costó porque hay que tener todas las dependencias listas.

El resultado

Este proceso es bastante lento obviamente, pero tendremos que estar pendientes por si nos falta alguna librería o comando necesario para que todo vaya bien, así que conviene no irse muy lejos. Al final, el resultado es algo así:

Generated: (out/target/product/generic/android-info.txt)

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img

Install system fs image: out/target/product/generic/system.img

Target ram disk: out/target/product/generic/ramdisk.img

Target userdata fs image: out/target/product/generic/userdata.img

Installed file list: out/target/product/generic/installed-files.txt

Lo que viene a significar que ya tenemos construido nuestro sistema Android totalmente hecho en casa con ingredientes naturales. Ahora toca saber qué hacer con todo eso que ha salido, y lo primero en mi caso, saber donde me ha colocado mi querido “fastboot”:

nacho@fraguelrock:~/android$ find . -name fastboot -print

./system/core/fastboot

./out/host/linux-x86/obj/EXECUTABLES/fastboot_intermediates/fastboot

./out/host/linux-x86/bin/fastboot

Y podremos ejecutar el kernel con el “emulator” que viene en el SDK usando un perfil preconfigurado. A partir de este punto espero avanzar para poder poner otro artículo con lo investigado.

Comentarios cerrados
Inicio