Sacado de aqui y de diversas fuentes que voy poniendo enlaces conforme vayan saliendo. Yo no he inventado ésto, ni lo he descubierto, solo os lo pongo aquí para que no perdais el tiempo como lo he tenido que perder yo.
Si hay alguna parte que os parece que hay algún agujero en la explicación, os atrancais en algun punto o no os funciona, decidmelo en los comentarios e intentaré solucionarlo en la medida de mis posibilidades. Estaré atento a los comentarios, lo prometo ;)
Llego a un punto del proyecto en el que necesitaba debuggear ciertos errores, me salía un mensaje en el eclipse que decía Source Not Found, me costó algo de tiempo solucionar ésto. Si os ha servido de ayuda, por favor, linkadme, poned un comentario, o enviadme cheques a mi casa.
El mismo problema aparece cuando estás debuggeando. Hay que conseguir los fuentes de android para colocarlos en la carpeta donde tengas instalado el sdk de android. Como siempre hay varias maneras de conseguir ésto. Una sencilla y otra un poco más complicada.
La manera sencilla: aprovecharse del trabajo de otros
La manera sencilla es descargar directamente los fuentes preparados que un amable caballero nos ha preparado para que los usemos (nos 22MB cada uno). Aquí os dejo los enlaces:
La manera de los valientes: prepararse su propio zip
Comencemos el camino de los valientes. Necesitamos varias cosicas:
- Python 2.4 lo más normal es que lo tengas instalado, si no es así lo puedes obtener de su página oficial.
- JDK 6. Si no tienes éste, apaga y vámonos.
- Git 1.5.4 or más moderno. Puedes encontrarlo en http://git.or.cz/ o en tu gestor de paquetes (sudo apt-get install git-core).
Ahora hay que instalar Repo. Repo es una herramienta que hace más facil todo el proceso de bajar los fuentes de android. Para más información acerca de Repo visiten la exquisita documentación de google acerca del tema.
- Creamos un directorio en nuestra carpeta personal y lo incluimos en el path:
mkdir ~/bin PATH=~/bin:$PATH
- Descargamos el comando repo y nos aseguramos que está como ejecutable
curl http://android.git.kernel.org/repo > ~/bin/repo chmod a+x ~/bin/repo
Una vez tengamos todos los requisitos creamos una carpeta para meter todos los fuentes de android.
cd mkdir android-src cd android-src
Ahora llamamos al repo que hemos bajado para inicializar el repositorio
- CupCake (Android 1.5)
- Donut (Android 1.6)
- EClair (Android 2.0)
- Froyo (Android 2.2)
- Gingerbread (Android 2.3)
repo init -u git://android.git.kernel.org/platform/manifest.git -b donut
Debe dar una salida como lo siguiente:
Getting repo ... from git://android.git.kernel.org/platform/manifest.git remote: Counting objects: 659, done. remote: Compressing objects: 1remote: 00% (285/285), done. remote: Total 659 (delta 256), reused 617 (delta 237) Receiving objects: 100% (659/659), 180.40 KiB | 100 KiB/s, done. Resolving deltas: 100% (256/256), done. From git://android.git.kernel.org/platform/manifest * [new branch] android-1.5 -> origin/android-1.5 * [new branch] android-1.5r2 -> origin/android-1.5r2 * [new branch] android-1.5r3 -> origin/android-1.5r3 * [new branch] android-1.5r4 -> origin/android-1.5r4 ....................... * [new tag] android-sdk-tools_r7 -> android-sdk-tools_r7 From git://android.git.kernel.org/platform/manifest * [new tag] android-1.0 -> android-1.0 Your Name [angel]:
Nos pide el nombre amablemente, se lo damos. Nos pide una dirección de correo electrónico, yo se la dí, los conspiranoicos que pongan lo que quieran. Cuando terminemos tiene que salir una cosa como ésta.
repo initialized in /home/angel/android-src
Ya tenemos incializado el repositorio, ahora le damos a bajar los fuentes con el comando
repo sync
Se pone a bajar una gran cantidad de archivos, unos 4 gigas me bajó a mi.
Initializing project platform/bionic ... remote: Counting objects: 7582, done. remote: Compressing objects: 100% (2710/2710), done. remote: Total 7582 (delta 5191), reused 7124 (delta 4805) Receiving objects: 100% (7582/7582), 2.62 MiB | 176 KiB/s, done. Resolving deltas: 100% (5191/5191), done. From git://android.git.kernel.org/platform/bionic * [new branch] cdma-import -> korg/cdma-import * [new branch] cupcake -> korg/cupcake * [new branch] cupcake-release -> korg/cupcake-release ........................ * [new tag] android-sdk-tools_r7 -> android-sdk-tools_r7 Checking out files: 100% (7697/7697), done.ut files: 4% (331/7697) Checking out files: 100% (5528/5528), done. Checking out files: 100% (453/453), done.g out files: 5% (27/453) Checking out files: 100% (3804/3804), done.out files: 3% (116/3804) Checking out files: 100% (4187/4187), done.out files: 25% (1061/4187) Checking out files: 100% (403/403), done.g out files: 21% (85/403) Checking out files: 100% (641/641), done.g out files: 23% (148/641) Checking out files: 100% (601/601), done.g out files: 3% (23/601) Checking out files: 100% (7313/7313), done.out files: 18% (1332/7313) Checking out files: 100% (6591/6591), done.out files: 0% (62/6591) Checking out files: 100% (350/350), done.ng out files: 48% (169/350) Checking out files: 100% (282/282), done.ng out files: 10% (31/282) Checking out files: 100% (1670/1670), done. out files: 0% (8/1670) Checking out files: 100% (11/11), done.king out files: 45% (5/11) Syncing work tree: 100% (141/141), done.
Y así termina el proceso y terminamos con un directorio lleno de cosicas como éste.
Ahora hay que preparar los bonitos zips. Un caballero nos propone hacerlo con un script de python. Otro caballero explica como hacerlo a mano. Me cuadra la primera forma.
Creamos un archivo en la carpeta sources llamado prepara.py, lo editamos y pegamos ésto:
from __future__ import with_statement # for Python < 2.6 import os import re import zipfile # open a zip file DST_FILE = 'sources.zip' if os.path.exists(DST_FILE): print DST_FILE, "already exists" exit(1) zip = zipfile.ZipFile(DST_FILE, 'w', zipfile.ZIP_DEFLATED) # some files are duplicated, copy them only once written = {} # iterate over all Java files for dir, subdirs, files in os.walk('.'): for file in files: if file.endswith('.java'): # search package name path = os.path.join(dir, file) with open(path) as f: for line in f: match = re.match(r'\s*package\s+([a-zA-Z0-9\._]+);', line) if match: # copy source into the zip file using the package as path zippath = match.group(1).replace('.', '/') + '/' + file if zippath not in written: written[zippath] = 1 zip.write(path, zippath) break; zip.close()Ahora nos vamos a la carpeta y ejecutamos:
python prepara.py
Ya tenemos los fuentes, ahora que?
Una vez tenemos los fuentes, creamos un directorio llamado sources dentro de la carpeta donde esta el android.jar que estamos usando, en mi caso es la carpeta android-sdk-linux_86/platforms/android-4/sources y la carpeta tiene que tener una pinta como ésta:
Con esto ya tenemos los fuentes de android integrados en eclipse para poder curiosear y mirarle las tripas a este amiguito que nos regala google. Sin embargo para que el debugger encuentre esos fuentes hay que indicárselo
Hay que cambiar la perspectiva de eclipse a modo debug
Botón derecho en el proyecto y darle a "Edit Source Lookup"
Le damos "Add" y luego "File System Directory"
Le damos "Browse" y localizamos nuestra carpeta de sources creada, en mi caso:
Y Voilá... ya tenemos nuestro debugger funcionando para que sepamos de qué va el error que nos estaba dando el programa
9 comentarios:
He probado la manera sencilla y funciona perfectamente. Saludos!
Me alegro que haya ayudado, ese es el espíritu.
Gracias por el comentario.
Y en windows como instalo repo?
Prueba la manera sencilla, con los zips preparados que hay. No uso windows, no te puedo ayudar con eso, lo siento.
Los zips ya los habia visto pero necesito los de froyo (2.2), de todas maneras estaba trabajando en windows porque no me ha dado ganas de reinstalar el debian en mi desktop, pero creo que ahora tengo una buena razon para hacerlo.
Una ultima cosa, muchas gracias por todo lo que te has esforzado escribiendo estos tutoriales, sigue asi. Por cierto antes de encontrar tu blog de andengine, "compre" un ebook que se publicara en diciembre de este ano que a pesar de ser "profesional" no lo siento tan bien explicado como tu blog, asi que le llevas la delantera a algunos.
Ps: el libreo se llama "Learning android game programming" lo compre en safari books
Espero que a alguien le sirva esto: http://www.megaupload.com/?d=293G0ELB es el zip con el source code de froyo, creado siguiendo esta util guia.
Gracias, con tu permiso lo incluyo en el articulo, ok?
Porsupuesto, es por eso que lo publique en tu blog, para dar una ayuda.
Excelente aporte, felicitaciones por la investigación y tiempo invertido. Gracais por compartirlo.
Publicar un comentario