Desenvolvendo para Android no Eclipse: R.java não está se regenerando

309

Descobri que meu R.java nunca é atualizado, portanto não contém informações sobre meus novos recursos, então decidi excluí-lo e pensei que o Eclipse geraria um novo. Mas isso não aconteceu, e eu não tenho R.java agora. Como posso regenerar um?

Estou usando o Windows 7.

De um dos comentários: "Doing Project -> Clean é o que causou o problema para mim. A limpeza exclui R.java ... e por qualquer motivo, o plug-in não está regenerando o arquivo."

Peter Mortensen
fonte
minha solução ao limpar não funcionou: eu precisava baixar o Build Tools no SDK Manager e reiniciar o sistema. Eu tenho o ADT 22.3.0.
Moradnejad

Respostas:

177

Este site sugere:

se você executar uma limpeza no projeto, ele deverá gerar novamente todos os arquivos Java gerados, ou seja, R.

...e...

No Eclipse, no menu Projeto, há uma opção criada automaticamente. Isso ajudaria você a criar o arquivo R.java sempre que forem feitas modificações. A opção Limpar ... também está lá em Projeto.

Este site sugere outra solução.

aioobe
fonte
1
Quem teria pensado, obrigado pessoal +1 aqui eu tive um problema com meu layout e por isso R.Java não estava sendo criado. Great heads up! Felicidades.
101
Fazer Projeto-> Limpar é o que causou o problema para mim. A limpeza exclui R.java ... e, por qualquer motivo, o plugin não está regenerando o arquivo.
Cerin
7
Eu tive esse pop-up quando me vinculei a uma biblioteca que exigia uma versão diferente da API de suporte Android do que eu havia instalado. As dependências não funcionaram e meu R não foi gerado depois disso. Como já foi dito, ele aparece no log de erros, então verifique lá.
Mikebabcock 28/09/12
1
No meu caso, a limpeza do projeto apenas remove R.java , em vez de regenerá-lo. stackoverflow.com/questions/13065425/…
RobinJ 25/12
96
R.java não é regenerado se você tiver alguns erros no diretório res. Erros removido -> problema resolvido no meu caso :)
JavaRunner
300

Achei isso acontecendo comigo com um layout quebrado e tudo explode. Relaxe, é como aquele velho erro quando você aprendeu a programar C, onde você esquece um ponto-e-vírgula e gera cem erros. Muitos entram em pânico, pressionam todos os botões e pioram as coisas.

Solução

  • Certifique-se de que qualquer coisa para a qual os R.links não estejam quebrados. Corrija todos os erros em seus arquivos XML . Se algo nos ADKs estiver quebrado, Rnão será regenerado.
  • Se você de alguma forma acertar algo e criar import android.Rem sua atividade, remova-o .
  • Execute Projeto -> Limpar . Isso excluirá e regenerará o R e o BuildConfig.
  • Verifique se Projeto -> Compilar automaticamente está marcado. Caso contrário, construa-o manualmente via Menu -> Project -> Build Project.
  • Aguarde alguns segundos para que os erros desapareçam.
  • Se não funcionar, exclua tudo dentro da pasta / gen /
  • Se ainda assim não funcionar, tente clicar com o botão direito do mouse em seu projeto -> Ferramentas Android -> Corrigir propriedades do projeto .
  • Verifique seus arquivos * .properties (na pasta raiz da pasta do aplicativo) e verifique se os links não estão quebrados.
  • Clique com o botão direito do mouse em seu projeto> propriedades> Android . Observe as seções Alvo e Biblioteca do Projeto, no lado direito da página. Seu destino de compilação deve corresponder ao destino no seu AndroidManifest.xml. Portanto, se estiver definido como destino 17 no AndroidManifest, verifique se o Nome do destino é Android 4.2. Se sua biblioteca tiver um X sob a referência, remova e adicione novamente a biblioteca até que haja uma marca verde. Isso pode acontecer se você tiver movido alguns arquivos e pastas.

O que fazer se R não regenerar

Isso geralmente acontece quando você tem um arquivo XML quebrado.

  • Verifique os erros nos seus arquivos XML, principalmente dentro da /res/pasta
  • Lugares comuns são /layout/e /values/, especialmente se você alterou um deles recentemente
  • Verifique AndroidManifest.xml. Acho que frequentemente mudo uma string e esqueço de mudar o nome da string AndroidManifest.xml.
  • Verifique se Android SDK Build-toolsestá instalado. Janela -> Gerenciador do Android SDK -> Ferramentas -> Ferramentas de compilação do Android SDK
  • Certifique-se de que, ao atualizar o Android SDK Tools, também atualize o Android SDK Platform-toolse Android ADK Build-tools. A construção falha silenciosamente se não corresponderem.
  • Se você não encontrar o problema, clique com o botão direito do mouse em / gen / -> Restaurar do histórico local ... -> marque R.java -> clique em Restaurar . Mesmo que não resolva o problema, ele eliminará os erros extras para facilitar a localização do problema.
Muz
fonte
21
essa deve ser a melhor resposta!
john.k.doe
6
Na verdade, isso me fez perceber que meu ambiente ainda precisava de uma atualização das ferramentas.
precisa saber é o seguinte
11
Janela-> Android SDK Manager-> Ferramentas> Android SDK Build-tools Esta é a solução para mim, upvoted
1
Eu li dezenas de respostas e somente essa mencionou a verificação de ferramentas de compilação do SDK. Eu deixei cegamente o eclipse baixar e instalar todas as minhas ferramentas Android quando ele se ofereceu para fazê-lo. Perdeu completamente essa parte.
perfil completo de Justin Aquadro
1
Verifique o console, pode fornecer erros detalhados que precisam ser corrigidos e você pode criar. Isso ajudou no meu caso
david72
40

Eu tive o mesmo problema. Quando fiz o check-out, descobri que o nome do recurso XML no layout não estava tendo a convenção de nomenclatura correta. Tinha algumas letras maiúsculas. Então, renomei para deixar todas as letras em minúsculas e a mágica funcionou.

Amit Kumar
fonte
2
tnx ... bobagem me fez pensar que eu poderia usar maiúsculas em meus nomes de layout
Kevin
também funcionou para mim: o console relatou o seguinte: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Nome de arquivo inválido: deve conter apenas [a-z0-9_.]
sami
1
Obrigado, este foi o meu problema. Eu tinha um arquivo .xml na pasta de layout com uma capital, e todo o meu arquivo R.java estava ausente / não seria gerado por causa disso. A única maneira de saber isso era perceber que a convenção de nomenclatura não permitia capital; nenhum erro foi gerado.
precisa
1
Ao nomear arquivos ou atributos de recurso, tente nomear como uma variável em Java. a R.class coloca os recursos, ou seja, id, drawable, nomes de arquivos xml com uma constante final estática pública, então colocar "-", "caractere especial" levaria a parar de gerar R, pois esses símbolos podem ter outros meios aritméticos.
IronBlossom 5/05
1
Sim, este foi o problema para mim. Um arquivo em meu res / xml se referia a um arquivo de layout que não existia e, aparentemente, isso faz com que R.java não seja gerado, portanto, se eu executar o Clean, isso causou um R.java ausente, resultando em centenas de erros de importação ...
Cerin
28

Uma das razões pelas quais a R. R. pode desaparecer repentinamente é quando há erros nos arquivos XML. Por exemplo, quando você adiciona um arquivo XML com letras maiúsculas no nome como myCoolLayout.xml, o que não é permitido. Ou quando você tem referências que não apontam para arquivos existentes etc.

Pawel
fonte
17

No Eclipse, basta usar Projeto -> limpar para limpar o projeto. O R.java será automaticamente (re) criado.

Se por algum motivo isso não funcionar: verifique se os arquivos layout.xml não contêm erros. O Eclipse parece ser um pouco problemático aqui: às vezes, não marca os erros no XML nem no explorador de pacotes. Nesse caso: Dê uma olhada na exibição "console" ou "problemas" depois de usar "limpo". Todos os erros devem ser exibidos lá. Corrija-os e refaça uma limpeza.

NOTA: NÃO é necessário corrigir os erros que você recebe devido a um arquivo R ausente! Basta corrigir os arquivos XML e outros erros do projeto e usar clean!

masi
fonte
Verifique se as convenções de nomenclatura do arquivo de recurso estão corretas. @Masi obrigado por sua dica de procurar no "console" por erros após a limpeza. isso me ajudou.
Bharath Booshan 31/03
10

Conserto rápido:

O nome do pacote no manifesto precisa ser o mesmo da /srcpasta, o /genpacote da pasta será reproduzido automaticamente.

Observação detalhada:

Observe o nome do pacote na /genpasta. No meu caso, era diferente do da /srcpasta.

O pacote referenciado no manifesto era o da /genpasta.

Tentei adicionar um pacote com o nome da /srcpasta à pasta para /genver o que teria acontecido, mas isso não resolveu o problema. Continuei removendo o nome do pacote que não era igual ao nome do pacote da /srcpasta. Este pacote com o nome que não corresponde à /srcpasta foi recriado assim que eu o removi.

Como a referência do pacote no manifesto correspondia àquela que estava sendo recriada sem sentido e que não correspondia ao pacote na /srcpasta, isso solicitou a renomeação package = "oldPackage"com package = "srcFolderPackage".

androidWorkerTheEighth
fonte
9

Eu tive o mesmo problema e finalmente encontrei o problema: no strings.xml, não mantive a linha <string name="app_name">program-name</string>presente por padrão ao criar um novo projeto Android. Eu pensei que era usado apenas para o programa HelloWord, que é o programa original.

No entanto, o AndroidManifest.xml refere-se a esse valor, portanto:

=> Um erro de compilação;
=> o R.java não é atualizado;
=> ID não são reconhecidos ...

Glaux
fonte
a linha no string.xml é "<string name =" app_name "> nome do programa </string>". Desculpe, tive um problema com minha postagem.
Glaux
9

O Android adicionou a ferramenta de construção do SDK ADT 22 para o mecanismo de construção. Você só precisa seguir os seguintes passos.

  1. Atualizar ferramenta Android SDK
  2. Atualizar ferramenta da plataforma Android SDK
  3. Atualizar ferramenta de compilação do SDK do Android
  4. Adicione o caminho da sua ferramenta de construção à variável path. (caminho até ---- SEU DIRETÓRIO-CAMINHO \ android-sdk \ build-tools)

Isso resolverá o problema.

Amol
fonte
Minha resposta é a única que se relaciona à pergunta. ainda tem apenas 3 votos. estranho!
Mr.India
8

Se o seu R.java não estiver sendo gerado, uma das soluções é excluir o arquivo de layout chamado "blabla.out.xml".

Após excluir este arquivo, tente limpar o projeto no menu Projeto -> Limpar .

Shashank
fonte
7

Como generalização da resposta do Glaux, se houver algum erro no resdiretório, o R.java poderá não ser gerado - mesmo se você limpar e reconstruir. Resolva esses erros primeiro.

Como exemplo: quando você adiciona um arquivo de imagem como "myimage-2.jpg", o sistema considerará isso um erro, pois os nomes dos arquivos são limitados a valores alfanuméricos. Faça uma atualização no diretório 'res' depois de adicionar qualquer arquivo e observe a saída na janela do console para obter qualquer aviso de nome de arquivo.

Abel
fonte
Exatamente! Isso acontece comigo de vez em quando quando renomeio as strings no meu strings.xml. Isso pode criar referências pendentes nos meus arquivos de layout. E isso inibe a produção de R.java. Pena que não há como refatorar IDs XML.
Scott Biggs
6

Se o seu sistema operacional for Ubuntu, posso fornecer algumas sugestões:

  1. Instale ou atualize o ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Verifique se você tem a permissão correta na pasta aapt:

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

    sudo eclipse
  4. Executar projeto -> Limpar no Eclipse

Nevin Chen
fonte
excelente. e também faz adb funcionar. Apenas me lembre que eu devo instalar isso quando reinstalar o ubuntu.
Yeung
mesma solução é verdadeiro para Debian amd64
Markus Peröbner
Esta resposta stackoverflow.com/questions/19523502/... fornece instruções mais frescas, ia32-libs não existia em Elementar
Singagirl
6

Você 100% tem um erro em um arquivo XML , mas a verificação XML não mostra o erro. Esta é a razão pela qual você precisa verificar seus arquivos XML primeiro!

Erdinc Ay
fonte
5

É sempre útil dar uma olhada na guia Problems no Eclipse. No meu caso, estava recebendo uma mensagem de erro " android incapaz de resolver o destino 'android-8' " que impedia a geração do R.java. Então, corrigi o destino importado para o que estava usando no arquivo default.properties e, em seguida, executei uma limpeza em Projetos-> Limpo e pronto! R.java é gerado automaticamente! Espero que ajude!

goseib
fonte
Obrigado por apontar para a guia problemas. Sou novo no android e no eclipse, então não o usei antes e estava ficando frustrado. É o primeiro lugar a procurar ao encontrar esse erro.
Maadinsh
4

Limpar o projeto, fechar o Eclipse, reabri-lo e iniciar meu projeto finalmente fez meu R.java reaparecer ... Espero que ajude

Filippo Mazza
fonte
Eu também tive que reiniciar, Eclipse estava reclamando aapt faltando, mas ele estava presente ....
Filippo Mazza
4

Verifique se você não está importando

android.R;

Zain Ali
fonte
4

R.java nunca será gerado se houver algum erro na respasta. Por exemplo, na subpasta desenhável, existem dois arquivos com o mesmo nome, um é icon.png e o outro é icon.html.

Você pode ver algum erro na janela de log do console do Eclipse, que está dizendo "Ícone de entrada de recurso já está definido". Após excluir o icon.html, você pode limpar ou simplesmente excluir a genpasta. Você verá que R.java é criado.

Peter Mortensen
fonte
4

Descobri que qualquer arquivo com letras maiúsculas na respasta criará esse erro. Isso aconteceu comigo com um arquivo PNG que eu adicionei e esqueci.

Peter Mortensen
fonte
3

Depois de ler muitas postagens e vídeos do YouTube, descobri que cada um de nós R.javadesapareceu por diferentes motivos.

Aqui está como eu corrigi isso no Eclipse:

  • Crie R.java na genpasta manualmente e salve.
  • Depois disso, vá para o Project e clique em "Limpar"

A seguinte mensagem será exibida e seu arquivo será reescrito automaticamente:

R.java foi modificado manualmente! Revertendo para a versão gerada!

Anup Singh
fonte
1
Anup ..Eu fiz isso /// Mas apenas para ser removido quando eu o limpei ... O problema ainda não foi resolvido para mim!
Ejjyrex 28/05
3

Para mim, vinculei o v7 appcompat duas vezes. De qualquer forma, no Eclipse, clique com o botão direito do mouse no nome do projeto no Package Explorer ou no Navigator, acesse Propriedades, Android e desmarque as duplicatas na seção Biblioteca. Pode ser necessário criar -> limpar posteriormente.

Shanker Kaura
fonte
2

Obviamente, não há uma resposta final para isso, mas aqui está outra que ainda não vejo aqui:

Eu tive R.javadesaparecer depois (tentar) uma equipe Sincronizar, e havia arquivos de resolução de conflitos no projeto (ou seja, thingy.xml.mine, thingy.xml.r35, etc.). Excluindo-os / resolvendo os conflitos regenerados R.

Ben Mosher
fonte
2

Eu tive esse problema. Por acaso eu apaguei este

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

que começou a causar erros de construção em todo o projeto nos meus arquivos XML e nos meus arquivos Java. Assim que redigitei o que excluí, ele funcionou novamente :)

Mohamed El-Saka
fonte
2

OK, é claro que pode haver muitas causas para esse problema. Se você estiver em uma máquina Linux de 64 bits e estiver configurando o ADT pela primeira vez, poderá encontrar este problema em que o R não está gerando automaticamente. Verifique a guia do console e você poderá ver um erro semelhante a:

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

Se for esse o caso, você precisará instalar o ia32-libs, usando algo como:

 sudo apt-get install ia32-libs

Veja aqui para detalhes: adb do Android não encontrado

Patrick
fonte
2

Eu me deparei com esse problema algumas vezes. Descobri que, se não importasse o pacote R pelo nome do meu aplicativo, por exemplo, se meu aplicativo tivesse o nome do pacote exemplo.teste, descobri que precisava importar o exemplo.teste.R para acessar qualquer um dos Recursos.

Se isso não foi importado, os recursos que retornaram foram os recursos padrão, sem incluir nenhum dos meus.

Com isso dito, se você achar que está obtendo apenas uma lista de recursos padrão, verifique se está importando application_package_name.R e não android.R.

Peter Mortensen
fonte
2

Meu problema era que appcompatnão estava no mesmo diretório do meu projeto.

Descobri isso ao compilar meu aplicativo com o Ant .

Martin
fonte
1

Verifique também se você possui a versão mais recente do plug-in ADT e abra o gerenciador do SDK do Android para atualizar todas as ferramentas do SDK para a versão mais recente. Verifique também se há atualizações no próprio Eclipse. Versões não correspondentes causaram o problema para mim.

caw
fonte
1

Meu problema estava dentro de um arquivo de menu. O compilador não parece avisá-lo se as seqüências que não existem no interior strings.xmlsão referenciadas nos arquivos de menu. Verifique se os items no seu arquivo XML do menu referenciam seqüências que não existem no seu strings.xml. Geralmente em android:title.

Stefan Anca
fonte
1

Para mim, esse erro foi causado quando tentei duplicar um existente em res/menuvez de criar um com o wizard.

Hakim
fonte
1

Todas essas respostas podem não funcionar se você usar o Maven. A solução para mim foi adicionar

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

para a seção de configuração do android-maven-plugin.

Bevor
fonte
1

Eu encontrei uma solução por que R.class não é fabricado pelo Eclipse depois de fabricá-lo novamente - 2 limpos, construídos etc.

O problema está aqui em strings.xml:

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

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

Por padrão, eles são criados pelo Eclipse quando você cria projetos.

Definitivamente, você está alterando o strings.xml para seus próprios requisitos. Às vezes, você limpa o string.xmls essas duas linhas do seu código:

Está causando um problema no arquivo AndroidManifest.xml:

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

Portanto, ele não pode se comunicar com o strings.xml.

aarifmkhan
fonte
1

Alterei o nome do arquivo XML do layout e descobri mais tarde que o arquivo XML (provedor de widgets nesse caso) ainda se refere ao XML antigo do layout que não existe e que impedia a geração / correção automática da classe R.

Howard
fonte