R no se puede resolver: error de Android

1072

Acabo de descargar e instalar el nuevo SDK de Android. Quería crear una aplicación simple para probarlo.

El asistente creó este código:

package eu.mauriziopz.gps;

import android.app.Activity;
import android.os.Bundle;

public class ggps extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

pero Eclipse me da el error

R no se puede resolver

en linea

setContentView(R.layout.main);

¿Por qué?

PD: Tengo un archivo XML denominado main.xmlbajo res/layout/.

Maurizio Pozzobon
fuente
Para aquellos que todavía experimentan algún problema con eclipse, no pueden actualizar / generar R.java. Una posible solución es crear un xml ficticio y simplemente eliminar ese xml. En mi caso, esta es la solución
denil el
Honestamente, esto suena tan estúpido (y lo es), pero modificar el AndroidManifest.xml, luego deshacer esa edición y luego guardar el archivo funcionó para mí. Si limpié el proyecto después de eso, se rompió nuevamente. Y todo este tiempo pensé que Xcode era el único IDE que tenía este tipo de errores misteriosos.
Fui robado el
3
¿Intentó hacer clic derecho en el proyecto -> Herramientas de Android -> Reparar configuración del proyecto?
Sergei
66
Compruebe su archivo de diseño XMl, si hay algún error en xml no puede generar R.java, y el error se produce después de bulid y clean también.
swiftBoy
1
Solo un consejo: cuando cambié IDE de Eclipse a Android Studio, esto dejó de sucederme.
mata

Respuestas:

840

Después de rastrear este problema también, encontré esta nota en la documentación de Android:

http://source.android.com/source/using-eclipse.html

* Nota: A Eclipse a veces le gusta agregar una declaración "import android.R" en la parte superior de sus archivos que usan recursos, especialmente cuando le pide a Eclipse que ordene o gestione las importaciones. Esto hará que su marca se rompa. Esté atento a estas declaraciones de importación erróneas y elimínelas. *

Mientras revisaba los tutoriales de muestra de Android, a menudo usaba el comando Ctrl+ Shift+ Opara "Organizar importaciones" y generar cualquier declaración de importación faltante. A veces, esto generaría una declaración de importación incorrecta que ocultaría la R.javaclase que se genera automáticamente cuando compila.

Michael Levy
fuente
32
Esto también sucede, pero un archivo de diseño agrupado también puede causarlo.
GHz
113
Este error clásico ha estado en Eclipse durante AÑOS y nunca se soluciona. Miles de personas enfrentan este mismo problema.
Carol
52
¡Desarrolladores de Eclipse, por favor eliminen este $ £% & "$ & / bug! ¡Desarrolladores de Google, por favor denme una suite de £ $ & $"% y Android similar a Xcode para iPhone!
Abramodj
18
@ 2-Stroker: es un error. Me sucedió cuando creé un nuevo proyecto andorid a través del eclipse WIZARD y se quejó de que 'R no se puede resolver'. Tuve que comentar las líneas setContentView & getMenuInflater y luego eclipse generó el R.java después de lo cual pude descomentar setContentView & getMenuInflator. Abramodj tiene razón, el entorno tiene serios problemas si incluso su ejemplo de 'hola mundo' no se compila. Arreglarlo google!
CF_Maintainer
55
¿Cómo no otorga Google fondos a eclipse.org para arreglar artículos como este?
Cris
391

Cada vez que tuve un problema con R no generado, o incluso desaparecido, esto se debió a algún problema en el archivo de diseño XML que impidió que se construyera la aplicación.

Luc
fuente
21
+1 por esto. Tenía un archivo styles.xml anterior con parent = "android: WindowTitleBackground" y estaba rompiendo mi compilación y evitando cualquier cosa generada a "gen". El error no se informó realmente, excepto en la ventana de la Consola justo cuando abrí el proyecto por primera vez.
Scott Persinger
12
exactamente, si copió diseños de otro proyecto y está obteniendo esto, busca elementos extraviados que faltan, ¡eso lo solucionará al instante!
Gabor
44
Creo que tengo el mismo problema, ¿hay alguna forma de saber cuál es uno de los diseños?
Sergey Kucher
3
Sí, me faltaba un archivo dibujable y eso evitó que se generara el archivo R. Lo extraño es que tenía una android:icon="@drawable/XXX"declaración en un <item>recurso de menú, pero no había un garabato rojo que indicara que no se encontró el recurso extraíble XXX. En otros casos, "@drawable/YYY" se marcó cuando no se encontró YYY, pero no en este caso. Por alguna razón.
taylor
55
Sí, excelente solución. Cuando uno recibe este error ... muchas veces todos los archivos de diseño están marcados como que tienen errores ... Esto se debe a que todos están buscando R. Sin embargo, uno de ellos probablemente tiene un error no relacionado que anula la compilación. En mi caso, falta un dibujable.
Todd Painton
201

Cada vez que consigues

R no se puede resolver

luego verifique el /resdirectorio y debe haber algún archivo que tenga algún error y que impida que se cree la aplicación. Por ejemplo, puede ser un archivo de diseño o puede ser debido a que falta un recurso, pero ya lo definió en el archivo XML.

Si tiene imágenes adicionales, incluso sin usar (!) O sin referencia (!) En una carpeta como res / drawables-mdpi que no cumplen con las convenciones de nomenclatura de archivos (puede contener solo [a-z0-9_.]), Es posible que la clase R.java no se genere, causando la cadena de eventos a la que se refieren todas las otras publicaciones. ¡Espero eso ayude!

Kailash
fuente
Tuve este problema con la muestra ApiDemos. Faltan algunos recursos en el archivo strings.xml. Los errores de XML se enumeran en la consola de Eclipse.
lemotdit
¡gracias! este era mi problema, tenía un diseño que estaba fallando pero no había ningún mensaje al respecto.
29
¿Cómo puede verificar si hay errores? No consigo nada en mi consola cuando construyo / ejecuto
Vincent
44
¿Cómo averiguar QUÉ archivo xml causa el error? ¡Eclipse no los marca!
Yar
1
Tenía 2 imágenes con el mismo nombre en la carpeta hdpi (1 con png y 1 con formato jpg), eliminar 1 de ellas resolvió el problema
Haseeb Jadoon
134

mi proyecto ha incluido un r.java.Al principio, R.layout.main funciona bien, pero después de agregar algo de código no funciona y el error es R.layout.main no se puede resolver. ¿Cuál es el problema? ?

Mira tus importaciones. Lo más probable es que la línea:

import android.R;

estaré ahí. Si ese es el caso, elimínelo para que su proyecto resuelva R no con la clase predeterminada de Recursos de Android, sino con la que se genera automáticamente desde su carpeta / res /.

Dimitar Dimitrov
fuente
55
Gracias @ Dimitar, ¡eso solucionó mi problema! Eclipse y la función de importación automática parecen haberme captado al agregar esa línea de importación automáticamente.
Steven
77
También tuve problemas similares cuando nombré un diseño con letras mayúsculas
Travis
Esta es una de las 5 razones principales por las cuales las personas obtienen "R no encontrado". He compilado una página de problema / solución con imágenes que muestran los 5 principales en el enlace a continuación. Realmente espero que la lista ayude a las personas ya que este es un problema común. spragucm.wordpress.com/2014/05/13/…
Chris Sprague
después de eliminar R, en algunos lugares R se usa como clase y está dando error ahora, ¿cómo resolver eso?
Narendra Jaggi
96

Y otra cosa que puede causar este problema:

Instalé el nuevo ADT (v. 22). Dejó de crear la gencarpeta que incluye R.java. La solución también fue instalar las nuevas herramientas de compilación del SDK de Android desde el Administrador del SDK de Android.

Solución encontrada aquí

Michał K
fuente
Yo también Y cuando seleccioné el administrador de SDK, he aquí, las herramientas de compilación se muestran automáticamente para la instalación, con una nota de que no estaba instalado. ¿¿¿Lo que da???
David en HotspotOffice
Tuve el mismo problema. Me alegra que hayas compartido esto. Miré error de mi propio código dos días. Estoy muy decepcionado con Google, porque este mensaje de error ha sido muy difícil de resolver, pero ha sido causado por un error propio, aunque las herramientas no informan correctamente qué lo causa. He hecho cambios al mismo tiempo en mi proyecto, así que pensé que era mi culpa nuevamente.
Reijo Korhonen
55
Trabajó para mí, gracias! Simplemente refuerza mi mantra: "nunca actualices nada mientras desarrollas".
Rodrigo Dias
Estaba dando vueltas buscando la respuesta, pero nada me funcionó. Creo que fue un problema de eclipse o SDK. así que como dices, simplemente elimino el paquete eclipse anterior y lo reinstalo. y luego está funcionando su respuesta fue ayudada
principiantes
Este fue el problema en mi caso! Perdí un día tratando de corregir el error R, agregando / eliminando referencias y probando otras opciones. El mío era una nueva configuración nueva de ADT, y una nueva creación de proyecto de Android, y todavía recibía el error. Finalmente, tuve que instalar todas las actualizaciones disponibles de Android SDK Tools, Android SDK Platform Tools y SDK Build Tools: p
Saurabh Kumar
87

R.javaes un archivo que los complementos Eclipse de Android crean al compilar su aplicación. R.javase crea bajo el directorio "gen". Este archivo se genera a partir de la información en el directorio "res". Si ejecuta, seleccione "Proyecto" -> "Limpiar ..." en el menú Eclipse, eliminará y luego regenerará el R.javaarchivo.

El problema "R no se puede resolver" ocurre cuando cambia el nombre del paquete en el AndroidManifest.xmlarchivo. Utiliza el nombre de su paquete de Android para crear un subdirectorio en el directorio "gen" donde almacena el R.javaarchivo.

Eclipse puede tener problemas para ejecutar clean, porque no está R.javaseguro de dónde está el archivo cuando ha cambiado el nombre del paquete de Android. Puede cambiar el nombre del subdirectorio genpara que coincida con el nuevo nombre del paquete, o puede cambiar el nombre del paquete nuevamente al antiguo. Realice la limpieza y luego cambie el nombre del paquete al nuevo nombre que desee. Esto funciona mejor si evita que Eclipse intente compilar mientras cambia el nombre del paquete. Debajo del menú "Proyecto", desmarque la opción "Construir automáticamente" y también cuando el cuadro de diálogo "Limpiar ..." le pregunte si debería "Iniciar una compilación inmediatamente", desmarque la casilla para que no intente compilar mientras está cambiando El nombre del paquete. Después de haber cambiado el nombre, puede volver a activar "Construir automáticamente".

Tenga en cuenta que si el AndroidManifest.xmlnombre de su paquete de archivos no coincide con el nombre de su paquete de Java, Eclipse terminará agregando automáticamente un "import <su nombre de paquete de Android> .R;" alinee todos sus .javaarchivos que tengan alguna referencia a R. Si cambia el AndroidManifest.xml nombre de su paquete, a veces Eclipse no actualiza todas estas importaciones agregadas. Si eso sucede, use la refactorización de Eclipse ( ALT+ Shift+ R) para cambiar la declaración de importación en uno de sus archivos Java a su nuevo AndroidManifest.xmlnombre de paquete. Es mejor hacer esto mientras ha deshabilitado "Construir automáticamente".

usuario286516
fuente
21
Esto parece un corte y pegar sin referencia
Casebash
1
La copia / pegado múltiple de archivos y la refactorización de nombres conducen al mismo problema, a pesar de que todos los nombres de archivos y contenidos estaban bien. Limpiar el proyecto, eliminar R.java manualmente y todos los encabezados de importación, luego reconstruir estos encabezados de importación (aún con CTRL + MAYÚS + O) funcionó bien.
hornetbzz
Esto funcionó para mí. Había cambiado el nombre del paquete en el manifiesto. Tuve que usar ctrl-shift-O en las clases que hacían referencia a los valores de clase R generados para agregar la importación correcta.
Chuck Krutsinger el
Esto me lo arregló. También he visto que el problema de importación ocurría en el pasado, pero esta vez el problema era que el nombre del paquete en el manifiesto no coincidía con el nombre del paquete en la carpeta src.
Jim Range
Tuve dos actividades en mi solicitud. Uno tenía un nombre de paquete diferente al que se generó contra R. Tuve que importar R manualmente usando algo comoimport com.example.main.package.name.R;
Oliver Moran
85

Lo que dijo Will era correcto

R es una clase generada automáticamente que contiene las constantes utilizadas para identificar sus> recursos. Si no tiene un archivo R.java (sería gen / eu.mauriziopz.gps / R.java en> Eclipse con el 1.5 SDK) recomendaría cerrar y volver a abrir su proyecto o ir a> Proyecto> Construir todo (y seleccionando "Construir automáticamente" mientras esté recomendado por> Josef). Si eso no funciona, intente hacer un nuevo proyecto, si se vuelve a crear el problema, publique aquí nuevamente y entraremos en más detalles.

pero descubrí que había otro problema que estaba causando el primero. Las herramientas en el directorio SDK no tenían los permisos para ejecutarse, por lo que era como si no existiera para Eclipse, por lo que no compiló el R.javaarchivo.

Por lo tanto, modificar el permiso y seleccionar "Construir automáticamente" resolvió el problema.

MaurizioPz
fuente
@Jignesh - cd $ANDROID_SDK_ROOT/build-tools/<version>. A continuación, chmod a+xen archivos como aapt, aidl, dexdump, dx, etc. ANDROID_SDK_ROOTdeberían fijarse en su entorno, y que apunten a su instalación del SDK. Por ejemplo, /opt/android-sdk. Es importante establecer ambos ANDROID_SDK_ROOTy ANDROID_NDK_ROOTporque las herramientas de Android los usan internamente. Ver el directorio recomendado de NDK en la lista de usuarios de NDK.
jww
@Lewis .. Ya seleccioné "Construir automáticamente" pero el error sigue ahí.
d_unknown
39

R es una clase generada automáticamente que contiene las constantes utilizadas para identificar sus recursos. Si no tiene un archivo R.java (sería gen / eu.mauriziopz.gps / R.java en Eclipse con 1.5 SDK), recomendaría cerrar y volver a abrir su proyecto o ir a Proyecto> Construir todo (y seleccionando "Construir automáticamente" mientras esté recomendado por Josef). Si eso no funciona, intente hacer un nuevo proyecto, si el problema se recrea, publique aquí nuevamente y entraremos en más detalles.

Será
fuente
8
Esto funcionó para mí, pero primero tenía que "Proyecto -> Limpiar ...".
Matt Connolly
27

Cierre todos los archivos, limpie el proyecto, reinicie Eclipse.

sharika
fuente
23
+1 Pero a veces necesita 3 reinicios de eclipse y 7 limpiezas de proyectos en el medio. Solo sigue intentando ;-) #rant
Matthias Bauch
3
Mezclar con tocar (editar + guardar) archivos .xml (strings.xml ...).
Ali Shakiba
24

Vale la pena registrarse AndroidManifest.xml. El atributo packagetiene el valor correcto.

Es decir:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...

Después de cambiar eso, R.javase volverá a generar.

siete
fuente
Mi nombre original del paquete era com.xxxxxdroid.router. Creé una nueva versión de mi aplicación com.xxxxxdroid2.router. Una vez que hice esto, tuve que actualizar el nombre del paquete en AndroidManifest.xml, pero solo mucho después de que comencé a copiar y pegar clases antiguas. ¡Gracias por la anotación!
Eugene van der Merwe
esto solucionó mi problema, estaba trabajando en un archivo xml, contento de recordar cuál, tengo un montón de ellos ... gracias ...
GHz
19

Este error también puede ser causado al agregar una actividad a un espacio de nombres que es diferente al espacio de nombres raíz para su paquete.

Por ejemplo, si com.example.myappes el espacio de nombres raíz para su paquete, puede agregar una actividad al com.example.myapp.activitiesespacio de nombres.

Esto producirá el error "R no se puede resolver".

Para arreglar la importación, la R en el espacio de nombres predeterminado en su actividad debe ser:

import com.example.myapp.R;
Rob
fuente
Esto me ayudó, había trasladado mis actividades a un paquete debajo de la raíz, agregando el paquete raíz como una importación (import com.example.myapp.R;) resolvió el problema.
eageranalyst
19

Junto con las excelentes sugerencias en las respuestas anteriores, asegúrese de que su objetivo Android esté configurado:

  1. Haga clic derecho en su proyecto
  2. Elige propiedades
  3. Elige Android en el menú de la izquierda
  4. Marque una casilla al lado del Objetivo de construcción del proyecto apropiado.
  5. Haga clic en Aplicar y en Aceptar

Editar: Un año después encontré otra causa. Tenía una imagen .jpg en mi carpeta dibujable con el mismo nombre que una imagen .png. Hacer referencia a esta imagen en mi código debe haber confundido el programa y dio el error "R no se puede resolver".

sátiro
fuente
17

Asegúrese de haber instalado la herramienta de compilación de Android desde el administrador de SDK

haga clic con el botón derecho en propiedades-> Java BuildPath seleccione Biblioteca y agregue android-support.jar, siga estos pasos.

Vaya a Proyecto-> Propiedades-> Ruta de compilación de Java que seleccione la pestaña Ordenar y exportar. Establezca la biblioteca .jar de Android-support marcada y suba al principio de la lista. Y limpiar y reconstruir ... Funciona para la mayoría de los casos

ingrese la descripción de la imagen aquí

Sunil Kumar
fuente
15

Acabo de tener este problema por enésima vez y me di cuenta de lo que lo estaba causando: creé un archivo XML con letras mayúsculas en el nombre. Todos sus nombres de archivo XML /resdeben coincidir [a-z0-9\\._].

usuario132014
fuente
Además, acabo de notar que el desbordamiento de la pila requiere que escapemos de todas las barras invertidas.
14

La solución más simple: a veces solo necesita guardar el archivo XML en el que estaba trabajando para que el generador automático se active.

Guarde el archivo (por ejemplo, main.xml), luego elimine el archivo R.java y vea si la R.java regenerada resuelve el problema de resolución R.

akim
fuente
Cierto. A veces, si dice que hay un problema en su XML donde no lo hay (línea roja ondulada o signo de exclamación amarillo), elimine la línea ofensiva, guarde el archivo XML, vuelva a pegar la línea y vuelva a guardarla. Si no está construyendo automáticamente, vuelva a construir después de eso, y podría funcionar. Eclipse es estúpido a veces. :)
hotshot309
A pesar de las otras respuestas enumeradas anteriormente, esta resultó ser la correcta para mí. Inicialmente recibí el mensaje "no puedo encontrar el APK" cuando fui a compilar un código de muestra, luego hice un Clean que generó una tonelada de errores "No se puede resolver R", y luego simplemente abrí el archivo .xml y lo guardé manualmente. fueron borrados y pude compilar.
SXe
Tan cierto: después de limpiar los proyectos, R.java desapareció: editar y guardar strings.xml resolvió el problema.
BurninLeo
12

Verifique los nombres de los archivos XML. Asegúrese de que todos estén en minúsculas.

También asegúrese de que los nombres de los recursos de imágenes también estén en CASO INFERIOR. Tenía una letra mayúscula en el nombre de mi archivo jpg, y causó el error R sin resolver en todo mi proyecto.

TonyS
fuente
+1 para este fue mi problema. Debe nombrar sus imágenes así: eicon.png no eIcon.png. Encontré el error mirando el Consol. Estaba devolviendo un error en el archivo con un nombre de archivo no válido: ...
jasonflaherty
10

Este error surgió en mi instalación de Linux Mint x64. Resultó que el resultado fue una falla en el ADBbinario, porque el ia32-libspaquete no estaba instalado. Simplemente ejecutando apt-get install ia32-libsy relanzando Eclipse corrigió el error.

Si su distribución x64 no tiene ia32-libs, tendrá que ir a Multiarch.

Marque # 4 y # 5 en esta publicación: http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883

Espero que esto ayude a alguien.

Meião
fuente
Vale la pena señalar que si tiene una instalación de Linux de 64 bits, necesitará ia32-libs. Si no lo tiene, intentar ejecutar el comando adb dará como resultado un mensaje extraño que dice que no puede encontrar el archivo o directorio.
rs_atl
10

Es posible que deba actualizar / instalar las herramientas del SDK. Vuelva a iniciar Android SDK Manager e instale un nuevo elemento: Android SDK Build-tools.one por una eliminación, arregle cuál funciona para usted.ingrese la descripción de la imagen aquí

Nazmul Hasan
fuente
9

Es posible que deba actualizar las herramientas del SDK. Vuelva a iniciar Android SDK Manager e instale un nuevo elemento: Android SDK Build-tools.

ingrese la descripción de la imagen aquí

Eduardo Dennis
fuente
8

Yo tuve este problema también. Resultó que había eliminado accidentalmente el recurso de cadena "nombre_aplicación" del strings.xmlarchivo, lo que estaba causando un error silencioso. Una vez que lo agregué nuevamente, la clase R se generó con éxito y todo volvió a funcionar.

Guy Starbuck
fuente
6

Intente que su nuevo nombre de archivo de diseño XML sea minúscula. Por ejemplo, use en my_file.xmllugar de myFile.xml.

Malcom
fuente
+1 SÍ! Asegúrese de que sigue las convenciones de nomenclatura correctas ... [a-z0-9_.]
jasonflaherty
6

Sin embargo, otra razón R.javapodría no generarse automáticamente si tiene directorios como res / drawable-hdpi , res / drawable-mdpi o res / drawable-ldpi .

1.6+ parece estar bien con estos directorios, pero 1.5 no los quiere. Cuando eliminé esos directorios, R.javacomencé a generar automáticamente para mí nuevamente.

Peter Mortensen
fuente
6

Primero verifique si hay algún error en cualquier diseño xml o no, si luego resuélvelo primero.

De lo contrario, elimine la dependencia junit del proyecto y reconstruya el proyecto.

ingrese la descripción de la imagen aquí

Jaimin Prajapati
fuente
5

Muchas veces esto se debe al número de versión MinSDK que proporcionó al crear el proyecto. Ejemplo:

Si desea que 2.1 sea el mínimo, Android 2.1 es en realidad API Nivel 7.

Puede ver de qué estoy hablando cuando navega por el SDK que descargó e instaló. Navegue hasta el lugar donde instaló el SDK ( C:\android-sdk-windowspor ejemplo) y abra la carpeta llamada "plataformas". Verá algo como "android-7" listado como una carpeta, y si abre, hay un source.propertiesarchivo que, cuando se abre con un editor de texto, le mostrará la versión de plataforma correspondiente.

Cuando crea un proyecto y debe seleccionar una API "Build Target", la última columna de esa lista llamada "Nivel API" muestra el número que está buscando al completar la configuración MinSDK.

Este es probablemente uno de los errores más comunes que hace que el R.javaarchivo no se cree en Proyecto> gen> nombre del paquete> R.java.

Aaron DeRenard
fuente
5

Remover main.out.xml. Soy nuevo en esto y todavía no sé para qué se usa este archivo, pero eliminarlo solucionó el problema.

usuario389061
fuente
5

Simplemente vaya a la lista del menú superior de Android. haga clic en Crear menú, en Construir, haga clic en Reconstruir proyecto .

ingrese la descripción de la imagen aquí

Gundu Bandgar
fuente
4

Tenía los ejemplos de Android 8 y estaba tratando de usar Android 7 SDK. Cuando cerré el proyecto y volví a abrir la carpeta de la aplicación y elegí usar Android 8 SDK, pude encontrar el archivo R. Espero que esto ayude.

vkris
fuente
4

En mi caso, tuve un error en mi AndroidManifest.xml. Otros han dicho que sus archivos XML deben estar libres de errores, pero solo estaba buscando en la carpeta res /. Encuentre y repare la mayor cantidad de errores posibles y el problema bien puede resolverse por sí solo.

Brian Lacy
fuente
Este fue el culpable en mi caso. CUALQUIER error en el archivo manifest.xml puede causar este problema si R.java aún no se ha creado.
Scott Biggs
4

En caso de que alguien esté interesado (podría estar salvando su vida aquí), tuve el error, R.xmlno se puede resolver, un poco diferente en un proyecto GLS. Hmmmm Después de buscar R.java, encontré una clase autogenerada XML.java, (creo) que no estaba allí.

¿Solución? Necesitaba una nueva carpeta en res: res\xmly un archivo llamado default_values.xml allí. Entonces todo estuvo bien.

En caso de que no tenga ese archivo, es:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
</PreferenceScreen>
phil
fuente