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.mkComentamos 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