sábado, 27 de agosto de 2011

Android - Error en R.java - Syntax Error on Tokens

De vuelta tras vacaciones y líos varios, y justo un mes después de la última entrada, retomo las publicaciones contando un pequeño problema que me he encontrado jugueteando un poco más con Android.

Resulta que estaba haciendo ligeras modificaciones en el main.xml para añadir un simple TextView a la pantalla, y cuando he terminado y me disponía a probar los cambios en el móvil, me he encontrado con que la clase R.java tenía un error.

Lo primero que hay que decir es que esta clase es generada de forma automática, y Eclipse se cuida mucho de que no la toquemos. Si lo intentamos nos avisará de que no debemos, pero no queda ahí la cosa. Si somos temerarios y le decimos que nos dan igual sus advertencias, nos encontraremos con que tras guardar los cambios el entorno volverá a generar la clase perdiendo lo que hemos hecho. Vamos, que el tratar de corregir la clase por nuestra cuenta es una batalla perdida.

Así que para hacer las cosas bien, lo que necesitamos es saber por qué se está generando la clase con un error. En este caso el que se me presentaba era:


La clase R.java, explicado sucintamente, es un índice con todos los recursos del proyecto Android. Luego si hay un error de sintaxis en ella por un token no reconocido, seguramente se deba a que hemos utilizado un carácter extraño en algún sitio.

En mi caso, por ejemplo, tras rebuscar un poco, conseguí darme cuenta de que había declarado el nuevo texto de la siguiente manera:


Lo que a simple vista parece correcto. Pero si nos fijamos otra vez, podemos observar que en el identificador pone @+ìd/enemyLifeText. Esa tilde sobre la primera i es la que está causando el problema. Si la eliminamos, la clase R.java se regenera y los problemas desaparecen.