Desarrollando para Android en Eclipse: R.java no se regenera

309

Descubrí que mi R.java nunca se actualiza, por lo que no contiene información sobre mis nuevos recursos, así que decidí eliminarlo y pensé que Eclipse generaría uno nuevo. Pero eso no sucedió, y no tengo R.java ahora. ¿Cómo puedo regenerar uno?

Estoy usando Windows 7.

De uno de los comentarios: "Hacer Proyecto -> Limpiar es lo que me causó el problema. Limpiar elimina R.java ... y por cualquier razón el complemento no está regenerando el archivo".

Peter Mortensen
fuente
mi solución cuando la limpieza no funcionaba: necesitaba descargar Build Tools en SDK Manager y luego reiniciar el sistema. Tengo ADT 22.3.0.
Moradnejad

Respuestas:

177

Este sitio sugiere:

si ejecuta una limpieza en el proyecto, debería regenerar todos los archivos Java generados, es decir, R.

...y...

En Eclipse, en el menú Proyecto, hay una opción de compilación automática. Eso lo ayudaría a construir el archivo R.java cada vez que se realicen modificaciones. La opción Limpiar ... también está ahí bajo Proyecto.

Este sitio sugiere otra solución.

aioobe
fuente
1
¿Quién hubiera pensado, gracias chicos +1 aquí tuve un problema con mi diseño y entonces R.Java no se estaba creando. Grandes cabezas! Salud.
101
Hacer Proyecto-> Limpiar es lo que me causó el problema. La limpieza elimina R.java ... y por cualquier razón, el complemento no está regenerando el archivo.
Cerin
77
Tuve esta ventana emergente cuando enlacé con una biblioteca que requería una versión de API de soporte de Android diferente de la que había instalado. Las dependencias no funcionaron y mi R no se generó después de eso. Como otros han dicho, aparece en el registro de errores, así que verifique allí.
mikebabcock
1
En mi caso, limpiar el proyecto simplemente elimina R.java , en lugar de regenerarlo. stackoverflow.com/questions/13065425/…
RobinJ
96
R.java no se regenera si tiene algunos errores en el directorio res. Errores eliminados -> problema resuelto en mi caso :)
JavaRunner
300

Encontré que esto me sucedía con un diseño roto y todo explota. Relájese, es como ese viejo error cuando aprendió la programación C donde olvida un punto y coma y genera cientos de errores. Muchos entran en pánico, presionan todos los botones y empeoran las cosas.

Solución

  • Asegúrate de que los R.enlaces no estén rotos. Solucione todos los errores en sus archivos XML . Si algo en los ADK está roto, Rno se regenerará.
  • Si de alguna manera golpeó algo y creó import android.Ren su actividad, elimínelo .
  • Ejecute Proyecto -> Limpiar . Esto eliminará y regenerará R y BuildConfig.
  • Asegúrese de que Proyecto -> Construir automáticamente esté marcado. Si no, compílelo manualmente a través de Menu -> Project -> Build Project.
  • Espere unos segundos a que desaparezcan los errores.
  • Si no funciona, elimine todo dentro de la carpeta / gen /
  • Si todavía no funciona, intente hacer clic con el botón derecho en su proyecto -> Herramientas de Android -> Reparar propiedades del proyecto .
  • Compruebe sus archivos * .properties (en la carpeta raíz de la carpeta de su aplicación) y asegúrese de que los enlaces no estén rotos.
  • Haga clic derecho en su proyecto> propiedades> Android . Mire las secciones Proyecto Construir destino y Biblioteca en el lado derecho de la página. Su Build Target debe coincidir con el objetivo en su AndroidManifest.xml. Entonces, si está configurado para apuntar 17 en AndroidManifest, asegúrese de que el Nombre de destino sea Android 4.2. Si su biblioteca tiene una X debajo de la referencia, elimine y vuelva a agregar la biblioteca hasta que haya una marca verde. Esto puede suceder si ha movido algunos archivos y carpetas.

Qué hacer si R no se regenera

Esto suele suceder cuando tiene un archivo XML roto.

  • Verifique los errores dentro de sus archivos XML, principalmente dentro de la /res/carpeta
  • Los lugares comunes son /layout/y /values/, especialmente si ha cambiado uno de ellos recientemente
  • Compruebe AndroidManifest.xml. Encuentro que a menudo cambio una cadena y olvido cambiar el nombre de la cadena AndroidManifest.xml.
  • Verifique que Android SDK Build-toolsesté instalado. Ventana -> Administrador de Android SDK -> Herramientas -> Herramientas de compilación de Android SDK
  • Asegúrese de que cuando actualice el Android SDK Tools, también actualice el Android SDK Platform-toolsy Android ADK Build-tools. La construcción falla en silencio si no coinciden.
  • Si no puede encontrar el problema, haga clic derecho / gen / -> Restaurar desde el historial local ... -> marque R.java -> haga clic en Restaurar . Incluso si no resuelve el problema, borrará los errores adicionales para que el problema sea más fácil de encontrar.
Muz
fuente
21
¡Esta debería ser la mejor respuesta!
john.k.doe
66
De hecho, me hizo darme cuenta de que mi entorno todavía necesitaba una actualización de las herramientas.
woodleg.as
11
Window-> Android SDK Manager-> Tools-> Android SDK Build-tools esta es la solución para mí, votada
1
Leí docenas de respuestas y solo esta mencionó la comprobación de SDK Build-tools. Dejé ciegamente que eclipse descargue e instale todas mis herramientas de Android cuando me ofreció hacerlo. Se perdió por completo esa parte.
Justin Aquadro
1
Verifique la consola, puede darle un error detallado que necesita ser reparado, y luego puede construir. Esto ayudó en mi caso
david72
40

Tuve el mismo problema. Cuando lo revisé, descubrí que el nombre del recurso XML en el diseño no tenía la convención de nomenclatura correcta. Tenía algunas letras mayúsculas. Así que le cambié el nombre para que todas las letras fueran minúsculas y la magia funcionó.

Amit Kumar
fuente
2
tnx ... tonto pensando que podría usar mayúsculas en mis nombres de diseño
Kevin
también funcionó para mí: la consola informó esto: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Nombre de archivo no válido: debe contener solo [a-z0-9_.]
sami
1
Gracias, este fue mi problema. Tenía un archivo .xml en la carpeta de diseño con mayúscula, y faltaba todo mi archivo R.java / no se generaría debido a eso. La única forma de saber eso era darse cuenta de que la convención de nombres no permitía una capital; No se generaron errores.
Lemmings19
1
Al nombrar archivos o atributos de recursos, intente nombrarlo como si nombrara una variable en Java. R.class pone los recursos, es decir, id, dibujable, nombres de archivo xml con una constante pública estática final, por lo que poner "-", "carácter especial" dejaría de generar R, ya que esos símbolos pueden tener otros medios aritméticos.
IronBlossom
1
Sí, este fue el problema para mí. Un archivo en mi res / xml hacía referencia a un archivo de diseño que no existía, y aparentemente esto hace que no se genere R.java, por lo que si ejecuto Clean, eso provocó una falta de R.java, lo que resultó en cientos de errores de importación ...
Cerin
28

Una razón por la que R.class puede desaparecer repentinamente es cuando hay errores en sus archivos XML. Por ejemplo, cuando agrega un archivo XML con letras mayúsculas en el nombre como myCoolLayout.xml que no está permitido. O cuando tiene referencias que no apuntan a archivos existentes, etc.

Pawel
fuente
17

En Eclipse, simplemente use Project -> clean para limpiar el proyecto. El R.java se creará (re) automáticamente.

Si por alguna razón eso no funciona: asegúrese de que sus archivos layout.xml no contengan errores. Eclipse parece ser un poco defectuoso aquí: a veces no marca los errores dentro del XML ni el explorador de paquetes. En tal caso: eche un vistazo a la vista "consola" o "problemas" después de usar "limpiar". Todos los errores deben mostrarse allí. Arreglarlos y rehacer una limpieza.

NOTA: ¡NO es necesario corregir los errores que obtiene debido a la falta de un archivo R! ¡Solo arregle los archivos XML y otros errores del proyecto y use clean!

masi
fuente
Asegúrese de que sus convenciones de nomenclatura de archivos de recursos sean correctas. @ Masi, gracias por su consejo de buscar en la "consola" los errores después de la limpieza. Esto me ayudó.
Bharath Booshan
10

Arreglo rapido:

El nombre del paquete en el manifiesto debe ser el mismo que el de la /srccarpeta, el /genpaquete de la carpeta se reproducirá automáticamente.

Observación detallada:

Observe el nombre del paquete en la /gencarpeta. En mi caso fue diferente al de la /srccarpeta.

El paquete al que se hace referencia en el manifiesto era el de la /gencarpeta.

Intenté agregar un paquete con el nombre de la /srccarpeta a la /gencarpeta para ver qué hubiera pasado, pero esto no resolvió el problema. Luego procedí a eliminar el nombre del paquete que no era el mismo que el nombre del paquete de la /srccarpeta. Este paquete con el nombre que no correspondía a la /srccarpeta se recreó tan pronto como lo eliminé.

Dado que la referencia del paquete en el manifiesto correspondía a la que se estaba recreando sin sentido y que no correspondía con el paquete en la /srccarpeta, esto provocó un cambio de nombre package = "oldPackage"con el package = "srcFolderPackage".

androidWorkerTheEighth
fuente
9

Tuve el mismo problema y finalmente encontré el problema: en strings.xml, no mantuve la línea <string name="app_name">program-name</string>que está presente de forma predeterminada al crear un nuevo proyecto de Android. Pensé que solo se usaba para el programa HelloWord, que es el programa original.

Sin embargo, AndroidManifest.xml se refiere a este valor, por lo tanto:

=> Un error de compilación;
=> el R.java no se actualiza;
=> La identificación no se reconoce ...

Glaux
fuente
la línea en string.xml es "<string name =" app_name "> nombre del programa </string>". Lo siento, tuve un problema con mi publicación.
Glaux
9

Android ha agregado en la herramienta de compilación SDK ADT 22 para el mecanismo de construcción. Solo necesita hacer los siguientes pasos.

  1. Actualizar la herramienta del SDK de Android
  2. Actualización de la herramienta de plataforma Android SDK
  3. Actualizar la herramienta de compilación del SDK de Android
  4. Agregue la ruta de su herramienta de compilación a la variable de ruta. (ruta hasta ---- SU DIRECTORIO-RUTA \ android-sdk \ build-tools)

Esto resolverá el problema.

Amol
fuente
Mi respuesta es la única que se relaciona con la pregunta. Todavía tengo solo 3 votos. ¡extraño!
Mr.India
8

Si su R.java no se está generando, una de las soluciones es eliminar el archivo de diseño llamado "blabla.out.xml".

Después de eliminar este archivo, intente limpiar el proyecto desde el menú Proyecto -> Limpiar .

Shashank
fuente
7

Como una generalización de la respuesta de Glaux, si tiene algún error en el resdirectorio, entonces R.java puede no generar, incluso si limpia y reconstruye. Resuelva esos errores primero.

Como ejemplo: cuando agrega un archivo de imagen de digamos "myimage-2.jpg", el sistema lo considerará un error, ya que los nombres de los archivos están limitados a valores alfanuméricos. Actualice su directorio 'res' después de agregar cualquier archivo y observe la salida en la ventana de su consola para ver las advertencias de nombre de archivo.

Abel
fuente
¡Exactamente! Esto me sucede de vez en cuando cuando cambio el nombre de cadenas en mi strings.xml. Esto puede crear referencias colgantes en mis archivos de diseño. Y ESO inhibe la producción de R.java. Lástima que no hay forma de refactorizar las ID de XML.
Scott Biggs
6

Si su sistema operativo es Ubuntu, puedo proporcionar algunas sugerencias:

  1. Instale o actualice ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Compruebe si tiene el permiso correcto en la carpeta aapt:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  3. Inicie Eclipse:

    sudo eclipse
  4. Ejecutar proyecto -> Limpiar en Eclipse

Nevin Chen
fuente
excelente. y también hace que adb funcione. Solo recuérdame que debería instalar esto cuando reinstales ubuntu.
Yeung
la misma solución es cierta para Debian amd64
Markus Peröbner
Esta respuesta stackoverflow.com/questions/19523502/… proporciona instrucciones más recientes, ia32-libs no existía en Elementary
Singagirl
6

El 100% tiene un error en un archivo XML , pero la verificación XML no muestra el error. ¡Esta es la razón por la que primero debe verificar sus archivos XML!

Erdinc Ay
fuente
5

SIEMPRE es útil echar un vistazo a la pestaña Problemas en Eclipse. En mi caso, recibí un mensaje de error " Android no puede resolver el objetivo 'android-8' " que impedía que se generara el R.java. Entonces, corregí el objetivo importado al que estaba usando en el archivo default.properties , luego realicé una limpieza a través de Proyectos-> ¡Limpiar y listo! R.java se genera automáticamente! ¡Espero eso ayude!

goseib
fuente
Gracias por señalar la pestaña de problemas. Soy nuevo en Android y Eclipse, así que no lo usé antes y estaba frustrado. Es el primer lugar para buscar cuando se encuentra con este error.
Maadinsh el
4

El proyecto de limpieza, cerrar Eclipse, volver a abrirlo y lanzar mi proyecto finalmente hizo que mi R.java reapareciera ... Espero que ayude

Filippo Mazza
fuente
También tuve que reiniciar, Eclipse se quejaba de la pérdida del aapt pero estaba presente ...
Filippo Mazza
4

Asegúrate de no importar

android.R;

Zain Ali
fuente
4

R.java nunca se generará si hay algún error en la rescarpeta. Por ejemplo, en la subcarpeta dibujable hay dos archivos que tienen el mismo nombre, uno es icon.png y el otro es icon.html.

Puede ver algún error en la ventana de registro de la consola Eclipse que dice "El icono de entrada de recursos ya está definido". Después de eliminar icon.html, puede limpiar o simplemente eliminar la gencarpeta. Encontrará que se creó R.java.

Peter Mortensen
fuente
4

Descubrí que cualquier archivo que tenga letras mayúsculas en la rescarpeta creará este error. Esto me sucedió con un archivo PNG que agregué y me olvidé.

Peter Mortensen
fuente
3

Después de leer muchas publicaciones y videos de YouTube, descubrí que cada uno de nosotros R.javafalta por diferentes razones.

Así es como solucioné esto en Eclipse:

  • Cree R.java en la gencarpeta manualmente y guárdelo.
  • Después de eso, vaya a Proyecto y haga clic en "Limpiar"

Aparecerá el siguiente mensaje y su archivo se reescribirá automáticamente:

¡R.java fue modificado manualmente! Volviendo a la versión generada!

Anup Singh
fuente
1
Anup ... hice eso /// Pero solo para ser eliminado cuando lo limpié ... ¡El problema aún no está resuelto para mí!
ejjyrex
3

Para mí, había vinculado v7 appcompat dos veces. De todos modos, en Eclipse, haga clic con el botón derecho en el nombre del proyecto en Package Explorer o Navigator, vaya a Propiedades, Android y desmarque cualquier duplicado en la sección Biblioteca. Es posible que deba construir -> limpiar después.

Shanker Kaura
fuente
2

Obviamente no hay una respuesta final a esto, pero aquí hay otra que no veo aquí:

He tenido R.javadesaparecen después de (intentar) Sincronizar un equipo, y no había archivos de resolución de conflictos en el proyecto (es decir, thingy.xml.mine, thingy.xml.r35, etc.). Eliminándolos / resolviendo los conflictos regenerados R.

Ben Mosher
fuente
2

Tuve este problema Accidentalmente borré esto

xmlns:tools="http://schemas.android.com/tools"

que comenzó a causar errores de compilación en todo el proyecto en mis archivos XML, así como en mis archivos Java. Tan pronto como volví a escribir lo que borré, funcionó nuevamente :)

Mohamed El-Saka
fuente
2

De acuerdo, está claro que puede haber muchas causas para este problema. Si está en una máquina Linux de 64 bits y solo está configurando el ADT por primera vez, puede tener este problema donde R no se genera automáticamente. Verifique la pestaña de la consola y puede ver un error similar a:

 'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'

Si ese es el caso, necesita instalar ia32-libs, usando algo como:

 sudo apt-get install ia32-libs

Consulte aquí para más detalles: no se encontró adb de Android

Patrick
fuente
2

Me he encontrado con este problema varias veces. Descubrí que si no importaba el paquete R a través del nombre de mi aplicación, por ejemplo, si mi aplicación tenía el nombre del paquete example.test, descubrí que tenía que importar example.test.R para acceder a cualquiera de los recursos

Si esto no se importó, entonces los recursos que fueron devueltos fueron los recursos predeterminados, sin incluir ninguno.

Dicho esto, si descubres que solo obtienes una lista de recursos predeterminados, solo asegúrate de que estás importando application_package_name.R y no android.R.

Peter Mortensen
fuente
2

Mi problema fue que appcompatno estaba en el mismo directorio que mi proyecto.

Descubrí esto al compilar mi aplicación con Ant .

Martin
fuente
1

También asegúrese de tener la última versión del complemento ADT y abra el administrador del SDK de Android para actualizar todas las herramientas del SDK a la última versión. Verifique las actualizaciones en Eclipse también. Las versiones no coincidentes me causaron el problema.

graznar
fuente
1

Mi problema estaba dentro de un archivo de menú. El compilador no parece advertirle si las cadenas que no existen en el interior strings.xmlse mencionan en los archivos de menú. Verifique si sus itemarchivos XML en su menú hacen referencia a cadenas que no existen en su strings.xml. Por lo general en android:title.

Stefan Anca
fuente
1

Para mí, este error fue causado cuando intenté duplicar uno existente en res/menulugar de crear uno con el wizard.

Hakim
fuente
1

Todas estas respuestas no podrían funcionar si usa Maven. La solución para mí fue agregar

<genDirectory>${project.basedir}/gen</genDirectory>

a la sección de configuración de android-maven-plugin.

Bevor
fuente
1

Encontré una solución por la cual R.cllass no está hecho por Eclipse después de hacerlo nuevamente: 2 limpio, compilado, etc.

El problema está aquí en strings.xml:

<string name="hello">Hello World, HelloAutoComplete!</string>

<string name="app_name">HelloAutoComplete</string>

Estos son creados de manera predeterminada por Eclipse cuando crea proyectos.

Definitivamente está cambiando strings.xml para sus propios requisitos. A veces borras el string.xmls estas dos líneas de tu código:

Está creando un problema en el archivo AndroidManifest.xml:

<application android:icon="@drawable/icon"  android:label="@string/app_name">
<activity android:name=".HelloAutoComplete" android:label="@string/app_name">

Por lo tanto, no se puede comunicar con strings.xml.

aarifmkhan
fuente
1

Cambié mi nombre de archivo XML de diseño y descubrí más tarde que el archivo XML (proveedor de widgets en este caso) todavía se refiere al antiguo XML de diseño que no existe y que impidió la generación / corrección automática de la clase R.

Howard
fuente