R não pode ser resolvido - erro do Android


1072

Acabei de baixar e instalar o novo Android SDK. Eu queria criar um aplicativo simples para testá-lo.

O assistente criou 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);
    }
}

mas o Eclipse me dá o erro

R não pode ser resolvido

conectados

setContentView(R.layout.main);

Por quê?

PS: Eu tenho um arquivo XML nomeado main.xmlem res/layout/.


Para aqueles que ainda enfrentam algum problema com o eclipse, não conseguem atualizar / gerar R.java. Uma solução possível é criar um xml fictício e excluí-lo. No meu caso esta é a solução
Denil

Honestamente, isso parece tão estúpido (e é), mas modificar o AndroidManifest.xml, desfazer a edição e salvar o arquivo funcionou para mim. Se eu limpei o projeto depois disso, ele quebrou novamente. E durante todo esse tempo, pensei que o Xcode era o único IDE que tinha esse tipo de erro misterioso.
iwasrobbed

3
Você tentou clicar com o botão direito do mouse no projeto -> Ferramentas Android -> Corrigir configurações do projeto?
Sergei

6
Por favor, verifique seu arquivo de layout XMl, se houver algum erro no xml, você não pode gerar R.java, e o erro ocorre depois de limpo e limpo.
swiftBoy

1
Apenas uma dica: quando mudei o IDE do Eclipse para o Android Studio, isso parou de acontecer comigo.
mata 17/07

Respostas:


840

Depois de rastrear esse problema também, encontrei esta nota na documentação do Android:

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

* Nota: Às vezes, o Eclipse gosta de adicionar uma declaração "import android.R" na parte superior dos arquivos que usam recursos, especialmente quando você solicita que o Eclipse classifique ou gerencie as importações. Isso fará com que sua marca se quebre. Procure essas instruções de importação incorretas e exclua-as. *

Durante os tutoriais de amostra do Android, usava o comando Ctrl+ Shift+ Opara "Organizar importações" e gerar quaisquer instruções de importação ausentes. Às vezes, isso geraria a instrução de importação incorreta que ocultaria a R.javaclasse que é gerada automaticamente quando você cria.


32
Isso também acontece, mas um arquivo de layout danificado também pode causar isso.
GHz

113
Esse bug clássico está no Eclipse há YEARS e nunca é corrigido. Milhares de pessoas enfrentam o mesmo problema.
Carol

52
Desenvolvedores do Eclipse, remova esse $ $% & "$ & / bug! Desenvolvedores do Google, me dê um pacote de $ $ & $"% & Android semelhante ao Xcode para o iPhone!
Abramodj 28/10/12

18
@ 2-Stroker: É um bug. Aconteceu comigo quando criei um novo projeto andorid do ramo através do eclipse WIZARD e ele reclamou sobre 'R não pode ser resolvido'. Eu tive que comentar as linhas setContentView e getMenuInflater e, em seguida, o eclipse gerou o R.java, após o qual pude descomentar setContentView e getMenuInflator. Abramodj está certo, o ambiente apresenta sérios problemas, mesmo que o exemplo do seu 'olá mundo' não seja compilado. Fix it google!
CF_Maintainer 17/03/2013

5
Como o Google não concede fundos do eclipse.org para corrigir itens como este?
Cris

391

Cada vez que eu tive um problema com o R não foi gerado, ou mesmo desapareceu, isso ocorreu devido a algum problema no arquivo de layout XML que impedia a criação do aplicativo.


21
+1 para isso. Eu tinha um arquivo styles.xml mais antigo com parent = "android: WindowTitleBackground" e ele estava quebrando minha compilação e impedindo qualquer coisa gerada em "gen". O erro não foi realmente relatado, exceto na janela do console, quando abri o projeto pela primeira vez.
Scott Persinger

12
exatamente, se você copiou layouts de outro projeto e está obtendo isso, procura por gavetas ausentes - que serão corrigidas instantaneamente!
Gabor

4
Eu acho que tenho o mesmo problema, existe alguma maneira de saber qual dos layouts?
Sergey Kucher

3
Sim, estava faltando um arquivo extraível e isso impedia que o arquivo R fosse gerado. O estranho é que eu tinha uma android:icon="@drawable/XXX"declaração em um <item>recurso de menu, mas não havia sinal vermelho que o recurso extraível XXX não foi encontrado. Em outros casos, "@drawable/YYY" foi sinalizado quando YYY não foi encontrado, mas não neste caso. Por algum motivo.
taylor

5
Sim, excelente solução. Quando alguém obtém esse erro .. muitas vezes todos os arquivos de layout estão marcados como tendo erros .. Isso ocorre porque todos estão procurando por R. Um deles, no entanto, provavelmente tem um erro não relacionado que interrompe a compilação. No meu caso, um drawable ausente.
Todd Painton

201

Sempre que você chegar

R não pode ser resolvido

verifique o /resdiretório e deve haver algum arquivo com algum erro e que impeça a criação do aplicativo. Por exemplo, pode ser um arquivo de layout ou pode ser devido à falta de algum recurso, mas você já o definiu no arquivo XML.

Se você tiver imagens adicionais, mesmo não utilizadas (!) Ou não referenciadas (!) Em uma pasta como res / drawables-mdpi que não estejam em conformidade com as convenções de nomenclatura de arquivos (podem conter apenas [a-z0-9_.]), O A classe R.java pode não gerar, causando a cadeia de eventos em todas as outras postagens mencionadas. Espero que ajude!


Eu tive esse problema com o exemplo ApiDemos. Algum recurso ausente no arquivo strings.xml. O erro XML está listado no console do Eclipse.
Lemotdit 31/07/10

obrigado! esse foi o meu problema, eu tinha um layout que estava com erro, mas não havia nenhuma mensagem sobre isso.

29
Como você pode verificar se há erros? Eu não tenho nada no meu console quando a construção / corrida
Vincent

4
Como descobrir qual arquivo xml causa o erro? O Eclipse não os marca!
18714 Yar

1
Eu tive 2 imagens com o mesmo nome na pasta hdpi (1 com png e 1 com formato jpg) apagar 1 deles resolveu o problema
Haseeb Jadoon

134

meu projeto inclui um r.java. no início, R.layout.main funciona bem.Mas, depois de adicionar algum código, ele não funciona, e o erro é R.layout.main não pode ser resolvido.qual é o problema ?

Veja suas importações. As chances são de que a linha:

import android.R;

estarei lá. Se for esse o caso, remova-o, para que seu projeto resolva R não com a classe Android Resources padrão, mas com a gerada automaticamente a partir da sua pasta / res /.


5
Obrigado @ Dimitar, que corrigiu o meu problema! O Eclipse e o recurso de importação automática parecem ter me ajudado adicionando essa linha de importação automaticamente.
Steven

7
Eu também tinha problemas semelhantes quando eu chamado um layout usando letras maiúsculas
Travis

Essa é uma das 5 principais razões pelas quais as pessoas recebem "R não encontrado". Eu compilei uma página de problema / solução com imagens que mostram os 5 principais no link abaixo. Espero realmente que a lista ajude as pessoas, pois esse é um problema comum. spragucm.wordpress.com/2014/05/13/…
Chris Sprague

depois de remover o R, em alguns lugares o R é usado como classe e está dando erro agora. Como resolver isso?
Narendra Jaggi

96

E outra coisa que pode causar esse problema:

Eu instalei o novo ADT (v. 22). Parou de criar uma genpasta que inclui R.java. A solução foi também instalar novas ferramentas de compilação do SDK do Android no Android SDK Manager.

Solução encontrada aqui


Eu também. E quando eu selecionei o gerenciador do SDK, eis que as ferramentas de compilação são verificadas automaticamente para instalação, com uma nota de que não foi instalado! O que da???
David em HotspotOffice

Eu tive o mesmo problema. Estou tão feliz que você compartilhou isso. Eu olhei erro do meu próprio código dois dias. Estou muito apontado para o Google, porque essa mensagem de erro foi muito difícil de resolver, mas foi causada por um erro próprio, embora as ferramentas não relatem adequadamente o que a causa. Fiz alterações no mesmo tempo no meu projeto, então pensei que era minha culpa novamente.
Reijo Korhonen

5
Trabalhou para mim, obrigado! Isso apenas reforça meu mantra: "nunca atualize nada enquanto estiver desenvolvendo".
Rodrigo Dias

eu estava procurando a resposta, mas nada funcionou para mim. Eu acho que foi um problema de eclipse ou sdk. Então, como você está dizendo, basta excluir o pacote anterior do eclipse e reinstalá-lo. e então está funcionando. sua resposta foi ajudada
iniciantes

Este foi o problema no meu caso! Perdeu um dia tentando corrigir o erro R, adicionando / removendo referências e tentando outras opções. O meu era uma nova configuração nova do ADT e uma nova criação de projeto Android, e ainda estava recebendo o erro. Descobriu-se, finalmente, eu tive que instalar todas as atualizações disponíveis de Ferramentas SDK do Android Tools Android SDK plataforma e as ferramentas SDK Constituição: p
Saurabh Kumar

87

R.javaé um arquivo que os plug-ins do Android Eclipse criam ao criar seu aplicativo. R.javaé criado no diretório "gen". Este arquivo é gerado a partir das informações no diretório "res". Se você executar, selecione "Projeto" -> "Limpar ..." no menu Eclipse, ele removerá e gerará novamente o R.javaarquivo.

O problema "R não pode ser resolvido" acontece quando você altera o nome do pacote no AndroidManifest.xmlarquivo. Ele usa o nome do pacote do Android para criar um subdiretório no diretório "gen" onde ele armazena o R.javaarquivo.

O Eclipse pode ter problemas ao executar a limpeza, porque está confuso sobre onde está o R.javaarquivo quando você alterou o nome do pacote Android. Você pode renomear o subdiretório genpara corresponder ao seu novo nome de pacote ou alterar o nome do pacote novamente para o nome antigo. Faça a limpeza e altere o nome do pacote para o novo nome desejado. Isso funciona melhor se você parar o Eclipse de tentar construir enquanto estiver alterando o nome do pacote. No menu "Projeto", desmarque a opção "Compilar automaticamente" e também quando a caixa de diálogo "Limpar ..." perguntar se deve "Iniciar uma compilação imediatamente" desmarque a caixa para que não tente compilar enquanto estiver alterando o nome do pacote. Depois de alterar o nome, você pode ativar "Criar automaticamente" novamente.

Observe que, se o AndroidManifest.xmlnome do pacote de arquivos não corresponder ao nome do pacote Java, o Eclipse acabará adicionando automaticamente uma "importação <nome do pacote do Android> .R;" em todos os seus .javaarquivos que tenham referências a R. Se você alterar o AndroidManifest.xml nome do pacote, algumas vezes o Eclipse não atualiza todas essas importações incluídas. Se isso acontecer, use a refatoração do Eclipse ( ALT+ Shift+ R) para alterar a instrução de importação em um de seus arquivos Java para o novo AndroidManifest.xmlnome do pacote. É melhor fazer isso enquanto você desabilitou o "Build Automaticamente".


21
Isto parece um cortar e colar sem referência
Casebash

1
Várias cópias / colagens de arquivos e refatoração de nomes levam ao mesmo problema, apesar de todos os nomes e conteúdos de arquivos estarem ok. Limpar o projeto, excluir R.java manualmente e todos os cabeçalhos de importação e reconstruir esses cabeçalhos de importação (ainda com CTRL + SHIFT + O) funcionou bem.
Hornetbzz

Isso funcionou para mim. Eu havia mudado o nome do pacote no manifesto. Eu tive que usar ctrl-shift-O nas classes que referenciaram os valores gerados da classe R para adicionar a importação correta.
Chuck Krutsinger

Isso consertou para mim. Também vi o problema de importação ocorrer no passado, mas desta vez o problema era o nome do pacote no manifesto não correspondia ao nome do pacote na pasta src.
Jim Faixa

Eu tive duas atividades no meu aplicativo. Um tinha um nome de pacote diferente daquele para o qual R foi gerado. Eu tinha que importar R manualmente usando algo parecidoimport com.example.main.package.name.R;
Oliver Moran

85

O que Will disse estava certo

R é uma classe gerada automaticamente que contém as constantes usadas para identificar seus recursos. Se você não tiver um arquivo R.java (seria gen / eu.mauriziopz.gps / R.java em> Eclipse com o SDK 1.5), eu recomendaria fechar e reabrir seu projeto ou acessar> Projeto> Construir tudo (e selecione "Compilar automaticamente" enquanto estiver lá, conforme recomendado por> Josef). Se isso não funcionar, tente criar um novo projeto, se o problema for recriado> publique aqui novamente e entraremos em mais detalhes.

mas descobri que havia outro problema que estava causando o primeiro. As ferramentas no diretório SDK não tinham permissões para serem executadas, portanto era como se não existisse para o Eclipse, portanto, não construiu o R.javaarquivo.

Então, modificar a permissão e selecionar "Criar automaticamente" resolveu o problema.


@Jignesh - cd $ANDROID_SDK_ROOT/build-tools/<version>. Em seguida, chmod a+xem arquivos como aapt, aidl, dexdump, dx, etc. ANDROID_SDK_ROOTdeve ser definido em seu ambiente, e ele irá apontar para a instalação SDK. Por exemplo /opt/android-sdk,. É importante definir os dois ANDROID_SDK_ROOTe ANDROID_NDK_ROOTporque as ferramentas do Android os utilizam internamente. Consulte Diretório NDK recomendado? na lista de usuários do NDK.
JWW

@ Lewis .. Eu já selecionei o "Build Automaticamente", mas o erro ainda está lá.
precisa saber é o seguinte

39

R é uma classe gerada automaticamente que contém as constantes usadas para identificar seus recursos. Se você não tiver um arquivo R.java (seria gen / eu.mauriziopz.gps / R.java no Eclipse com o SDK 1.5), recomendo fechar e reabrir seu projeto ou vá para Projeto> Construir tudo (e selecionando "Criar automaticamente" enquanto estiver lá, conforme recomendado por Josef). Se isso não funcionar, tente criar um novo projeto, se o problema for recriado, publique aqui novamente e entraremos em mais detalhes.


8
Isso funcionou para mim, mas eu tive que "Projeto -> Limpar ..." primeiro.
Matt Connolly

27

Feche todos os arquivos, limpe o projeto, reinicie o Eclipse.


23
+1 Mas, às vezes, é necessário 3 reinícios do eclipse e 7 projetos limpos no meio. Apenas continue tentando ;-) #rant
Matthias Bauch

3
Misture com tocar (editar + salvar) arquivos .xml (strings.xml ...).
Ali Shakiba 23/09/12

24

Vale a pena conferir AndroidManifest.xml. O atributo packagetem o valor correto.

Isso é:

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

Depois de alterar isso, o R.javaserá gerado novamente.


O nome do meu pacote original era com.xxxxxdroid.router. Criei uma nova versão do meu aplicativo com.xxxxxdroid2.router. Depois de fazer isso, tive que atualizar o nome do pacote no AndroidManifest.xml, mas apenas muito mais tarde depois de começar a copiar e colar as classes antigas. Obrigado pelo ponteiro!
Eugene van der Merwe

este fixo meu problema, eu estava trabalhando em um arquivo xml, feliz que eu lembrei cargas que um, eu tenho deles ... obrigado ...
GHz

19

Este erro também pode ser causado pela adição de uma atividade a um espaço para nome diferente do espaço para nome raiz do seu pacote.

Por exemplo, se com.example.myappfor o espaço para nome raiz do seu pacote, você poderá adicionar uma atividade ao com.example.myapp.activitiesespaço para nome.

Isso produzirá o erro "R não pode ser resolvido".

Para corrigir a importação, o R no espaço para nome padrão em sua atividade deve ser:

import com.example.myapp.R;

Isso me ajudou, eu havia movido minhas atividades para um pacote abaixo da raiz, adicionando o pacote raiz como uma importação (import com.example.myapp.R;) resolveu o problema.
Eageranalyst

19

Juntamente com as ótimas sugestões nas respostas anteriores, verifique se o destino do Android está definido:

  1. Clique com o botão direito do mouse no seu projeto
  2. Escolha Propriedades
  3. Escolha Android no menu esquerdo
  4. Marque uma caixa ao lado do Destino de Construção do Projeto apropriado.
  5. Clique em Aplicar e OK

Edit: Um ano depois, encontrei outra causa. Eu tinha uma imagem .jpg na minha pasta de desenho com o mesmo nome que uma imagem .png. A referência a esta imagem no meu código deve ter confundido o programa e deu o erro "R não pode ser resolvido".


17

Verifique se você instalou o gerenciador sdk do formulário da ferramenta de compilação do Android

projeto, clique com o botão direito do mouse em propriedades-> Java BuildPath, selecione Biblioteca e adicione android-support.jar, siga estas etapas.

Vá para Projeto-> Propriedades-> Caminho de Construção Java e selecione a guia Ordem e exportação. Defina a biblioteca .jar de suporte ao Android verificada e coloque-a no topo da lista. E limpe e reconstrua .. Funciona na maioria dos casos

insira a descrição da imagem aqui


15

Eu tive esse problema pela milionésima vez e percebi o que estava causando: Criei um arquivo XML com letras maiúsculas no nome. Todos os seus nomes de arquivos XML /resdevem corresponder [a-z0-9\\._].


Além disso, notei que o estouro de pilha exige que escapemos de todas as barras invertidas.

14

Solução mais simples - Às vezes, você só precisa salvar o arquivo XML em que estava trabalhando para ativar o gerador automático.

Salve o arquivo (por exemplo, main.xml), exclua o arquivo R.java e veja se o R.java regenerado resolve o problema de resolução de R.


Verdade. Às vezes, se houver um problema no XML em que não há (linha ondulada vermelha ou ponto de exclamação amarelo), exclua a linha incorreta, salve o arquivo XML, cole a linha novamente e salve-a novamente. Se você não estiver construindo automaticamente, construa novamente depois disso e poderá funcionar. Eclipse é estúpido às vezes. :)
hotshot309

Apesar das outras respostas listadas acima, esta foi a correta para mim. Inicialmente, recebi a mensagem "Impossível encontrar APK" quando fui compilar algum código de amostra e, em seguida, executei uma Limpeza que gerava uma tonelada de erros "R não pode ser resolvido" e, em seguida, basta abrir o arquivo .xml e salvar manualmente os erros foram limpos e eu pude compilar.
sXe

Verdade: Depois de limpar os projetos, o R.java se foi - editar e salvar o strings.xml resolveu o problema.
BurninLeo

12

Verifique os nomes dos arquivos XML. Certifique-se de que todos estejam em letras minúsculas.

Verifique também se todos os nomes de recursos de imagem estão todos em LOWER CASE. Eu tinha uma letra maiúscula no nome do meu arquivo jpg e isso causou o erro não resolvido do R em todo o meu projeto.


+1 para este foi o meu problema. Você deve nomear suas imagens da seguinte forma: eicon.png e não eIcon.png. Encontrei o erro olhando para o Consol. Ele estava retornando um erro no arquivo com Nome de arquivo inválido: ...
jasonflaherty


10

Este erro surgiu na minha instalação do x64 Linux Mint. Aconteceu que o resultado foi uma falha no ADBbinário, porque o ia32-libspacote não foi instalado. Simplesmente executar apt-get install ia32-libse reiniciar o Eclipse corrigiu o erro.

Se sua distribuição x64 não possui ia32-libs, você precisará usar o Multiarch.

Verifique os itens 4 e 5 deste post: http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883

Espero que isso ajude alguém.


Vale a pena notar que, se você tiver uma instalação Linux de 64 bits, precisará de ia32-libs. Se você não o tiver, a tentativa de executar o comando adb resultará em uma mensagem estranha dizendo que não é possível encontrar o arquivo ou o diretório.
rs_atl

10

Pode ser necessário atualizar / instalar as ferramentas do SDK. Reinicie o Android SDK Manager novamente e instale um novo item: Android SDK Build-tools.one por uma exclusão, corrija qual deles funciona para você.insira a descrição da imagem aqui


9

Pode ser necessário atualizar as ferramentas do SDK. Reinicie o Android SDK Manager novamente e instale um novo item: Android SDK Build-tools.

insira a descrição da imagem aqui


8

Eu tive esse problema também. Aconteceu que eu excluí inadvertidamente o recurso de cadeia "app_name" do strings.xmlarquivo, o que estava causando um erro silencioso. Depois que eu o adicionei novamente, a classe R foi gerada com sucesso e tudo voltou a funcionar.


6

Tente deixar o novo nome do arquivo de layout XML em minúsculas. Por exemplo, use em my_file.xmlvez de myFile.xml.


+1 SIM! Certifique-se de que segue as convenções de nomenclatura correta ... [a-z0-9_.]
jasonflaherty

6

Ainda outro motivo que R.javapode não ser gerado automaticamente é se você tiver diretórios como res / drawable-hdpi , res / drawable-mdpi ou res / drawable-ldpi .

O 1.6+ parece estar bem com esses diretórios, mas o 1.5 não os deseja. Quando removi esses diretórios, R.javacomecei a gerar automaticamente novamente para mim.


6

Primeira verificação: existe algum erro em qualquer layout xml ou não; se for, resolva-a primeiro.

Caso contrário, remova a dependência de junção do projeto e reconstrua o projeto.

insira a descrição da imagem aqui


5

Muitas vezes, isso ocorre devido ao número da versão do MinSDK que você forneceu ao criar o projeto. Exemplo:

Se você deseja que o 2.1 seja o mínimo, o Android 2.1 é na verdade o nível 7 da API.

Você pode ver do que estou falando quando navega no SDK que você baixou e instalou. Navegue até o local em que você instalou o SDK ( C:\android-sdk-windowspor exemplo) e abra a pasta chamada "plataformas". Você verá algo como "android-7" listado como uma pasta e, se abrir, existe um source.propertiesarquivo que, quando aberto com um editor de texto, mostra a versão da plataforma correspondente.

Ao criar um projeto e você deve selecionar uma API "Criar destino", a última coluna nessa lista chamada "Nível da API" mostra o número que você está procurando ao preencher a configuração do MinSDK.

Este é provavelmente um dos erros mais comuns que resulta no R.javaarquivo não ser criado em Projeto> gen> nome do pacote> R.java.


5

Retire main.out.xml. Eu sou novo nisso e ainda não sei para que serve esse arquivo, mas removê-lo resolveu o problema.


5

Basta ir à lista de menus do Android Top. clique no menu Build , em Build, clique em Rebuild Project .

insira a descrição da imagem aqui


4

Eu tinha os exemplos do Android 8 e estava tentando usar o Android 7 SDK. Quando fechei o projeto e reabri a pasta do aplicativo e optei por usar o Android 8 SDK, ele foi capaz de encontrar o arquivo R. Espero que isto ajude.


4

No meu caso, tive um erro no meu AndroidManifest.xml. Outros disseram que seus arquivos XML devem estar livres de erros, mas eu estava procurando apenas na pasta res /. Encontre e corrija o maior número possível de erros, e o problema pode resolver-se.


Este foi o culpado no meu caso. QUALQUER erro no arquivo manifest.xml pode causar esse problema se o R.java ainda não tiver sido criado.
Scott Biggs

4

Caso alguém esteja interessado (talvez eu esteja salvando sua vida aqui), tive o erro, R.xmlnão posso ser resolvido, um pouco diferente em um projeto GLS. Hmmmm. Depois de pesquisar R.java, encontrei uma classe gerada automaticamente XML.java, (acho) que não estava lá.

Solução? Ele precisava de uma nova pasta em res: res\xmle um arquivo chamado default_values.xml lá. Então tudo estava bem.

Caso você não tenha esse arquivo, é:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
</PreferenceScreen>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.