pacote R não existe

114

Estou recebendo o temido pacote Rnão existe, está me matando. O código está bom. Tenho aplicativos no mercado executando o código.

Agora está efetuando webviewaplicativos simples . o.0

R.string.app_nameestá errado meu main.xmle string.xmlestá bem. Estou tããão confuso.

Eu abri uma versão mais antiga para "borrow"algum código e foi inundado com R. errors.eu fiz uma limpeza e nada mudou, exceto para a importação R.androidsendo adicionada no topo.

Eu até carreguei no Netbeans e recebo a mesma coisa. Limpar não está funcionando. Posso escrever o R.javaarquivo sozinho?

O que é isso R? não é R. suposto corresponder aR.java

Taz Ryder
fonte
1
verifique se há erros na pasta res, se você tiver alguns projetos adicionados como biblioteca, verifique-os também
Sunny Kumar Aditya
1
Pressione Alt + Enter em setContentView (R.layout ... linha para adicionar a importação.
live-love

Respostas:

127

Para qualquer um que se deparou com isso, refatorou renomeando as pastas de namespace. Eu apenas esqueci de editar o AndroidManifest e é por isso que recebi este erro.

Certifique-se de verificar isso também.

Mathijs Segers
fonte
1
Parece que só consigo acessar R de dentro das minhas classes de atividades. Eu estava recebendo este erro ao tentar acessá-lo de outros arquivos de classe.
Joe Lapp
84

Só para simplificar:

import your.app.package.R;

Claro, substituindo your.app.packagepelo seu pacote de aplicativo.

Em todas as classes que usam referências de recursos R, remova qualquer outro importcom .R, ou seja,import android.R;

ocodo
fonte
3
Ao usar Cordova, esta é a solução adequada. Testado com Cordova 3.0.9
Peter
1
Na verdade, erro meu. Isso permite que o projeto Cordova seja CONSTRUÍDO corretamente, porém a tela inicial ainda NÃO aparece ... Portanto, esta solução não resolve realmente o problema em questão.
Peter
Isso é o que eu precisava fazer ao converter um projeto de teste Eclipse em um módulo do Android Studio.
RightHandedMonkey
Se você estiver usando o phonegap e adicionar a instrução de importação acima dentro do seu arquivo de plug-ins, certifique-se de remover a plataforma e adicionar novamente. Curta phonegap platform remove androidephonegap platform add android
Fawaz
54

TL; DR , se você receber o erro "pacote R não existe", os motivos possíveis são

  • algum erro nos arquivos de recursos XML
    -> corrigir erros XML
  • o pacote atual é diferente do Rpacote (ver package atributo em AndroidManifest.xml)
    -> Rclasse de importação , por exemplo import com.example.android.R;
    -> ou use o pacote apropriado em sua fonte, por exemplo package com.example.android;
    -> ou altere o atributo do pacote em AndroidManifest.xml para <manifest xmlns:android="..." package="com.example.android" ...>, se for apropriado
  • os Rids usados são dos recursos do sistema
    -> não importe android.R, mas prefixe os ids ofensivos com android., por exemplo, android.R.layout.simple_list_item_2
    você pode importar em android.Rvez de prefixar os ids é claro, mas então você não pode importar mais a Rclasse do aplicativo e deve prefixar os ids do aplicativo, por exemplo com.example.android.R.id.main_menu.

A R classe é gerada automaticamente a partir dos recursos do aplicativo. Ele contém os ids para esses recursos e está contido no pacote nomeado na <manifest> tag no AndroidManifest.xmlarquivo correspondente .

Se não houver erros nos arquivos XML de recursos, a R.javafonte será gerada em um subdiretório de pacote abaixo gen/e compilada.


Existe outra Rclasse localizada no androidpacote. Esta android.Rclasse contém algumas classes aninhadas, que por sua vez contêm se idoutros valores para recursos do sistema .


Para usar uma classe em Java, você deve nomear a classe com o pacote inteiro, por exemplo

java.util.List<Object> list = new java.util.ArrayList<Object>();

ou importe a classe e use-a sem o pacote

import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();

Você também pode usar uma classe sem nomear o pacote, se a classe atual e a classe usada estiverem no mesmo pacote, por exemplo

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}
Olaf Dietsche
fonte
1
No meu caso, o problema era o classpath 'com.android.tools.build:gradle:3.3.0'. Mudei para classpath 'com.android.tools.build:gradle:3.2.1' e o problema foi resolvido.
Mohit Rajput
25

Nunca, jamais tente escrever a classe R sozinho!

Você importou a classe R certa em seus arquivos?

Fazendo

import android.R;

ao invés de

import com.example.R;

parece ser o problema para muitas pessoas. Depois de limpar e construir, minhas aulas às vezes importam o errado.

J. Maes
fonte
3
Mas eu não entendo que a coisa R não estava lá quando eu inicialmente codifiquei e complementei o programa.
Taz Ryder
12

se você estiver desenvolvendo no android studio e refatorou o nome do pacote, deve alterar o nome do pacote no manifesto do Android e no arquivo gradle do aplicativo.

 applicationId "change here your package name"

e no arquivo de manifesto

 package="change here your package name"
Milon
fonte
Sim. Capitalização ligeiramente diferente do nome do aplicativo, por exemplo.
Steve White
9

R.java é um arquivo gerado automaticamente, geralmente não é compilado se houver erros no arquivo xml.

Não Você não pode escrever seu próprio arquivo R.java, ele deve ser gerado pelo compilador de recursos.

Verifique se há erros em todos os seus arquivos xml.

Nandeesh
fonte
1
Que tipo de erros e como um iniciante deve identificá-los?
user1725145
6

A classe R é um código Java gerado automaticamente a partir de seus arquivos XML (layout da IU, strings de internacionalização, etc.) Se o código costumava funcionar antes (como parece que está), você precisa dizer ao seu IDE para regenerar esses arquivos de alguma forma :

  • no IntelliJ, selecione Ferramentas> Android> Gerar fontes para <projeto>
  • (Se você conhece o caminho em outro IDE, sinta-se à vontade para editar esta resposta!)
DomQ
fonte
Esta foi a ans que pesquisei. Obrigado .. +1
Adhikari Bishwash
5

Acho que costumava funcionar, mas agora não ..

Isso pode acontecer se você alterar o nome do PACOTE dentro do seu arquivo MANIFEST

<manifest
   package="com.example.android...."

Se você quiser mudar o nome do pacote

  1. Altere o nome do pacote manualmente no arquivo de manifesto.
  2. Clique na sua classe R.java e pressione F6. Isso permitirá que você mova a classe para outro pacote, e todas as referências a essa classe serão atualizadas.
Emanuele Greco
fonte
Você é um deus! Eu estava mudando meu projeto de com.example.rickydam.txtbookspara com.txtbooks.txtbooksfazendo um novo projeto e mudei tudo para o novo projeto, mas não consegui encontrar R. Eu tentei invalidar caches, sincronizar com o gradle, limpar o projeto, reconstruir o projeto, reinstalar ferramentas SDK ... Nada estava funcionando! Mas sua solução resolveu meu problema! Obrigado novamente! Continue codificando!
Ricky Dam
4

Acabei de encontrar este erro ao usar o Bazel para criar um aplicativo Android:

error: package R does not exist
                + mContext.getString(R.string.common_string),
                                      ^
Target //libraries/common:common_paidRelease failed to build
Use --verbose_failures to see the command lines of failed build steps.

Certifique-se de que seu android_library/ android_binaryesteja usando um AndroidManifest.xmlcom o package=atributo correto e, se estiver usando o custom_packageatributo em android_libraryou android_binary, certifique-se de que esteja escrito corretamente.

Jin
fonte
3

Excluir import android.R; de todos os arquivos .. uma vez que limpe o projeto e construa o projeto .... Ele irá gerar

satish
fonte
3

Amostra: Meu pacote é com.example.mypc.f01 , para corrigir o erro, você adiciona a linha abaixo à Atividade:

import com.example.mypc.f01.R;

O Thạnh Ldt
fonte
3

Abaixo estão algumas técnicas que você pode usar para remover este erro: -

  1. Limpe seu projeto, Buidl-> Limpar Projeto
  2. Projeto de reconstrução, Build -> Projeto de reconstrução
  3. Abra o manifesto e verifique se há algum recurso faltando
  4. Layout de check-in para ID específico, se ausente, adicione-o
  5. Se as etapas acima não funcionaram, reinicie o Android Studio invalidando o cache
Budhdi Sharma
fonte
2

No meu caso, percebi que estava criando vários pacotes no projeto. No manifesto do Android, descobri que o nome do provedor estava mantendo incorretamente o valor de MyContentProvider em vez de .provider.MyContentProvider. Meu pacote principal (com a IU) era co.companyname.database.provider em vez de co.companyname.database.

Em seguida, nas instruções de importação para a classe afetada, simplesmente cliquei com o botão direito e pedi ao Android Studio (0.8.6) para otimizar minhas instruções de importação. Também observei que se você pesquisar .R na barra de pesquisa do AS no canto superior direito do IDE, poderá encontrar um arquivo R.java gerado automaticamente que faz parte do seu pacote. Neste ponto, você não precisa mudar nada. O Studio deve consertar o projeto depois de corrigir o arquivo Android Manifest e reconstruí-lo.

Um outro item é que em uma aula eu estava fazendo uso de toString (). Length () para avaliar uma string, mas troquei-os por TextUtils.IsEmpty (stringVal); Não consigo pensar em mais nada que fiz para resolver o problema.

Espero que isso ajude alguém.

NB - Tudo isso é com AS 0.8.6

PS

R.java é gerado automaticamente, então leia o cabeçalho: / * AUTO-GENERATED FILE. NÃO MODIFIQUE. * * Esta classe foi gerada automaticamente pela ferramenta * aapt a partir dos dados de recursos encontrados. Ele * não deve ser modificado manualmente. * /

Tommie C.
fonte
2

Quando experimentei isso, criei um novo projeto e copiei os arquivos do meu projeto antigo para o novo.

  1. Comece um novo projeto
  2. Adicione os arquivos antigos no novo projeto (copie e clique com o botão direito em Layout, drawables, com.packagename, ...) para colar meus arquivos de projetos antigos

No entanto, eu ainda tinha o mesmo problema: R does not exist. Então percebi que tinha copiado e colado o Manifesto do meu bloco de notas nos manifestos do Android Studio e não alterei o nome do pacote no arquivo de manifesto.

Portanto, depois que alterei o nome do pacote no manifesto para o novo nome do projeto, o novo projeto que criei funcionou bem.

Jesús Rojo
fonte
1

Quais arquivos você está importando para os arquivos que obtêm o erro R?

Meu entendimento do arquivo R é que eles são listas de referência geradas automaticamente para todos os atributos dentro do aplicativo Android. Portanto, você não pode mudar isso sozinho.

Você está usando o Eclipse para construir este projeto? Os projetos mais antigos estavam recebendo esses erros antes de atualizar o Eclipse? Quais são as referências que estão obtendo erros?

Certifique-se de que não importou outro arquivo R de outro código copiado em outro aplicativo.

Macaco musical
fonte
Eu tive problemas de R quando o arquivo AndroidManifest.xml e o arquivo project.properties dentro do projeto não estavam exibindo o mesmo destino / versão mínima do android.
Music Monkey,
1

Eu me deparo com esse problema sempre que troco de computador e tento importar projetos antigos de arquivos transferidos via USB.

Minha solução alternativa é apenas criar um novo projeto e copiar (arrastar) os arquivos para o IDE (atualmente usando o Netbeans) e reconstruir. Isso é um aborrecimento e uma solução meio hacky, mas corrige o problema.

Se isso acontecer com você, o pior caso é que você precise fazer backup de seus arquivos, excluir o projeto e apenas arrastar os arquivos para lá e recompilar. Espero que não chegue a esse ponto, mas essa seria sua opção nuclear.

user5101322
fonte
1

Você pode tentar

Menu superior do Android Studio> Arquivo> Invalidar caches / reiniciar ...

Clique no botão invalidar cache / reiniciar para reiniciar seu projeto

Resolva R.xxxx.xxx novamente se algum fragmento da classe R não resolver corretamente

então reconstrua seu projeto

Espero que ajude

Ethan Liew
fonte
0

Se você encontrar este erro no Android Studio:

Verifique os arquivos do módulo Gradle -> defaultConfig -> configuração de applicationId.

Verifique a tag AndroidManifest.xml -> pacote de manifesto.

Verifique as declarações de pacote em todos os arquivos src java.

Sincronizar, limpar e reconstruir com o Gradle.

NUNCA crie seu próprio arquivo R. R é gerado automaticamente a partir de seus arquivos Java de origem e configurações de construção.

rask004
fonte
0

Tive: "erro: o pacote R não existe" e assumi que javac não tinha acesso ao R.java.
Então, acrescentei% PROJ_LOC% \ gen ao sourcepath e funcionou! SOURCEPATH =% PROJ_LOC% \ src;% PROJ_LOC% \ gen

Não estou usando o Android Studio ou Ant (ou XML).

chatt
fonte
0

Se esse erro aparecer após a resolução de conflitos de mesclagem, um projeto simples Build -> Clean pode ajudar.

Dmitry Smolyaninov
fonte
0

Acabei de me livrar do erro no meu projeto. Eu importei um projeto de amostra, alterei as pastas do pacote, mas não atualizei o pacote em um dos arquivos java.

A causa mais provável deste erro 'pacote R não existe' é que o nome do pacote em Java ou arquivo de manifesto está incorreto. Verifique se ele está correto e em sincronia e, em seguida, faça uma compilação limpa.

Ajay B
fonte
0

Às vezes, isso é resolvido quando você apenas reimporta o projeto para o Android Studio.

Aung Pyae
fonte
0

Caminho errado: o projeto "desconta" os ponteiros para as imagens e se você tiver feito alterações de nome no caminho, por exemplo, pacote ou pastas refatorados. Depois, basta escrever a letra R novamente e o editor sugere o caminho certo e tudo funcionará. Neste caso, seus nomes de arquivo estão corretos e o conteúdo que é referido no ponteiro R. está presente, mas o caminho está errado, portanto, limpar e criar não funcionará.

Patrik Rikama-Hinnenberg
fonte
0

Outro caso de quebra de R. é o processamento de anotações .

Algum processamento pode se referir a classes localizadas em certas pastas ou níveis de pasta. Se você mover as classes obrigatórias para outro local, poderá obter R. como uma classe desconhecida.

Infelizmente, a indicação de erro para esse problema não é evidente no Android Studio.

Zon
fonte
0

Não há vantagem em escrever R.java você mesmo, porque ele é alterado em cada compilação,

Apenas lembre-se de usar R.something, por exemplo: R.raw.filename de classes internas que possuem valor de pacote semelhante ao valor de pacote dentro de AndroidManifest.xml

porque os IDs de recursos R. são definidos para o aplicativo ou biblioteca atual e todos são verificados se existirem no tempo de compilação, então não faz sentido permitir que eles sejam acessados ​​a partir de "código" que não tem como alvo o aplicativo ou biblioteca atual e pode ser usado em outros lugares.

Mustafa R.Mahdi
fonte
0

Esqueci de adicionar o "nome" do meu "pacote" no início da minha classe java. Verifique se o seu foi realmente adicionado.

JESUS ​​CRISTO É A ÚNICA MANEIRA DE T
fonte
-2

Eu resolvo meu problema:

pacote R não existe

.

Ir para o AndroidManifest.xmlarquivo e mudar minSDKVersion="17"de 19

Fazal
fonte
Eu peço desculpa mas não concordo. Você não deve ter minSDKVersion no arquivo AndroidManifest.xml de acordo com os padrões atuais. Se você o tiver, remova-o do arquivo AndroidManifest.xml, é um código redundante. O minSDKVersion & targetSdkVersion deve ser definido no arquivo build.gradle apenas.
Ajay B de