Android Cyanogen 6.0 RC1 Hoja de Trabajo

Introducción

Esta es la típica hoja de trabajo que no deberías de mirar si no quieres conocer detalles innecesarios. Recogerá todos los problemas con la compilación de Cyanogen 6.0 RC1 y su resolución. En la página buena sólo indicaremos la solución, y no el proceso de llegar a ella. Pero que narices, aquí estará de verdad el proceso de aprendizaje.

La compilación la estoy haciendo en un Mac Mini con arquitectura Intel funcionando con Debian. Seguro que Jobs no ha tenido en cuenta que: Mac Mini->Debian->Android->Móvil :)

Compilando

Según las instrucciones oficiales todo va suave hasta que nos ponemos a compilar y ...

make -j4
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=cyanogen_passion
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
...

hay muchos avisos al compilar el código C y C++. Por ejemplo:

external/srec/tools/thirdparty/OpenFst/fst/lib/compose.h:372: warning: suggest parentheses around && within ||

Estamos compilando con:

dpkg -l | grep gcc
ii  gcc-4.3                           4.3.2-1.1
dpkg -l | grep g++
ii  g++-4.3                           4.3.2-1.1

pero todo va compilando bien.

Hasta que llegamos a:

make: *** No hay ninguna regla para construir el objetivo `vendor/cyanogen/proprietary/RomManager.apk', necesario para `out/target/product/passion/system/app/RomManager.apk'.  Alto

que parece algo específico de una aplicación de Cyanogen. Se habrán olvidado de incluirla. Lo más sencilla será eliminarla del proceso de compilación.

find . -name "*mk" -exec grep -l RomManager {} \;
./vendor/cyanogen/products/common.mk

Comentamos en este fichero la construcción de esta aplicación y listo.

Surgen nuevos problemas:

Install: out/host/linux-x86/framework/makedict.jar
host Java: mkstubs (out/host/common/obj/JAVA_LIBRARIES/mkstubs_intermediates/classes)
directory does not exist: 9999999
directory does not exist: 9999999
directory does not exist: 9999999
directory does not exist: 9999999
make: *** [out/host/common/obj/JAVA_LIBRARIES/layoutlib_create_intermediates/javalib.jar] Error 41

Al final el problema viene de que la instalación de Java no la tenía bien. Ya he dejado sólo Java 1.5 instalado. Y todo ha ido mucho mejor :)

Pasamos a activar de nuevo la compilación de ROM Manager ... pero al hacerlo, casca ya que usa "@Override" según Java 1.6 aparentemente.

packages/apps/CMParts/src/com/cyanogenmod/cmparts/activities/WidgetOptionsActivity.java:60: method does not override a method from its superclass
                @Override               
                 ^

Si hacemos sólo "make -j4" no tiene en cuenta los cambios en los Makefiles. Parece que tendremos que hacer un "clean" de todo ...

make clean
...
Cleaning out/target/product/passion...
Cleaning out/target/common...
Cleaning out/host/linux-x86...
Cleaning out/host/common...
Clean.

empezamos de nuevo sin activar el ROM Manager y de vez en cuando podemos ver mensajes interesantes

make -j4
....
out/host/linux-x86/bin/mkbootfs out/target/product/passion/recovery/root | out/host/linux-x86/bin/minigzip > out/target/product/passion/ramdisk-recovery.img
out/host/linux-x86/bin/mkbootimg  --kernel out/target/product/passion/kernel  --ramdisk out/target/product/passion/ramdisk-recovery.img --cmdline "no_console_suspend=1 msmsdcc_sdioirq=1 wire.search_count=5" --base 0x20000000 --output out/target/product/passion/recovery.img
----- Made recovery image -------- out/target/product/passion/recovery.img
out/target/product/passion/recovery.img total size is 2953216
...

como este cuando finaliza la construcción de recovery.img. Observad que se usa el parámetro "--base 0x20000000" en mkbootimg! El que se hagan ya estas imágenes indica que el núcleo ya se había compilado antes, ya que es necesario. En concreto lo tenemos en: "out/target/product/passion/kernel".

Vuelve a fallar por el tema del @Override a pesar de no tener el "ROM Manager" así que vamos a pasar a JDK6 y a compilar con este.

apt-get install sun-java6-jdk

En Android aún recomiendan utilizar JDK5 así que este es un tema bastante relevante. Lo natural será que en Android salten a Java6 visto que en cyanogen todo compila y funciona en JDK6. ¿Será cyanogen una plataforma de pruebas que estará patrocinando Google?

Por defecto se pone en Debian java6 con el entorno Java así que podemos proseguir con la compilación:

javac -version
javac 1.6.0_20
make -j4
...
Install: out/target/product/passion/system/app/QuickSearchBox.apk
target Strip: dalvikvm (out/target/product/passion/obj/EXECUTABLES/dalvikvm_intermediates/dalvikvm)
 'out/target/common/obj/APPS/ApiDemos_intermediates/classes.dex' as 'classes.dex'...
 'out/target/common/obj/APPS/Calculator_intermediates/classes.dex' as 'classes.dex'...
target Strip: dexopt (out/target/product/passion/obj/EXECUTABLES/dexopt_intermediates/dexopt)
patch   0 is 205 bytes (of 2222090)
...

Con esta nueva versión de Java ha ido todo sobre ruedas.

...
Installed file list: out/target/product/passion/installed-files.txt
...
find . -name "*.img"
./out/target/product/passion/ramdisk-recovery.img
./out/target/product/passion/obj/PACKAGING/systemimage_unopt_intermediates/system.img
./out/target/product/passion/userdata.img
./out/target/product/passion/boot.img
./out/target/product/passion/ramdisk.img
./out/target/product/passion/system.img
./out/target/product/passion/recovery.img

Bueno, ahora tenemos una serie de imágenes "img" para ser instaladas en el móvil. Pero hay ciertos drivers en ficheros binarios que hay que extraer del móvil y poner en el entorno de compilación para que sea algo realmente funcional.

Siguiendo este proceso nos encontramos con algún problema

make -j4 CYANOGEN_WITH_GOOGLE=true otapackage
make: *** No hay ninguna regla para construir el objetivo `vendor/htc/passion/proprietary/libomx_wmvdec_sharedlibrary.so', necesario para `out/target/product/passion/system/lib/libomx_wmvdec_sharedlibrary.so'.  Alto

Mirando dentro del móvil, CM6RC1, creo que hay un error en un nombre:

cd /system/lib/
ls -l libomx*
....
-rw-r--r--    1 root     root        292888 Aug  1  2008 libomx_wmadec_sharedlibrary.so
-rw-r--r--    1 root     root        981868 Aug  1  2008 libomx_wmvdev_sharedlibrary.so

Diría que "libomx_wmvdev_sharedlibrary.so" debería de ser "libomx_wmvdec_sharedlibrary.so". Así que la copiamos :)

cp /system/lib/libomx_wmvdev_sharedlibrary.so /system/lib/libomx_wmvdec_sharedlibrary.so

y extraemos de nuevo los ficheros del móvil desde el PC

cd device/htc/passio
./extract-files.sh

Y lanzamos de nuevo la compilación

cd -
make -j4 CYANOGEN_WITH_GOOGLE=true otapackage
....
Install system fs image: out/target/product/passion/system.img
out/target/product/passion/system.img+out/target/product/passion/obj/PACKAGING/recovery_patch_intermediates/recovery_from_boot.p total size is 125713642
Package target files: out/target/product/passion/obj/PACKAGING/target_files_intermediates/cyanogen_passion-target_files-eng.acs.zip
Package OTA: out/target/product/passion/cyanogen_passion-ota-eng.acs.zip
unzipping target target-files...
using device-specific extensions in device/htc/common
warning: no radio image in input target_files; not flashing radio
done.

En principio parece que ha ido todo bien salvo por el mensaje de "no radio imagine in input". Demos el último paso:

./vendor/cyanogen/tools/squisher
...
Please install pngcrush
Zipping package...
Signing package...
Cleaning up...

Package complete: /home/acs/devel/android/cyanogen/cm-froyo/out/target/product/passion/update-cm-6.0.0-N1-RC2-signed.zip
567a8546ccdebf23a98cf72fe7d40696  update-cm-6.0.0-N1-RC2-signed.zip

Hacemos caso:

sudo apt-get install pngcrush

Bueno, pues parece que en este último se prepara todo construir el "update.zip", se firma y se deja todo preparado. Vemos que ya es RC2 en vez de RC1.

Ha llegado el momento de arriesgarnos a instalar esta nueva ROM a ver si está todo en su sitio :)

Si comparamos este "zip" con el que ya tenemos instalado

83196891 jul 24 19:46 update-cm-6.0.0-N1-RC2-signed.zip
67748622 jul 22 18:04 ../update-cm-6.0.0-N1-RC1-signed.zip

este nuevo ocupa más, algo normal al llevar ya incluidas las aplicaciones de Google. Pasamos a copiarlo al SD, reiniciamos el móvil en modo recovery, e instalamos este "update.zip".

La instalación de la actualización se realiza sin problemas desde el modo "recovery". ¿Qué pasará ahora cuando reiniciemos el móvil? Reiniciando ... a tardado un rato en la pantalla de la X inicial y parecía que no iba a arrancar pero finalmente lo ha hecho. La primera vez que arrancas con una ROM nueva va todo más lento.

Pues parece que todo ha ido bien, funciona la wifi, el hacer llamadas, el recibirlas, hacer fotos, están todas las aplicaciones ... diría que ha sido un éxito :)

AndroidC6RC1compilar (last edited 2010-07-25 09:27:54 by AlvaroDelCastillo)