le package R n'existe pas

114

J'obtiens que le paquet redouté Rn'existe pas, ça me tue. Le code est bon J'ai des applications sur le marché exécutant le code.

Maintenant, il effectue des webviewapplications simples . o.0

R.string.app_nameest une erreur de mon main.xmlet string.xmlva bien. Je suis tellement confus.

J'ai rouvert une ancienne version avec "borrow"du code et il a été inondé de R. errors.J'ai fait un nettoyage et rien n'a changé à part l'importation R.androidétant ajoutée en haut.

J'ai même chargé Netbeans et j'obtiens la même chose. Clean ne fonctionne pas. Puis-je écrire le R.javafichier moi-même?

Quelle est cette Rchose? n'est pas R. censé correspondre àR.java

Taz Ryder
la source
1
vérifiez le dossier res pour toute erreur, si vous avez des projets ajoutés en tant que bibliothèque, enregistrez-les également
Sunny Kumar Aditya
1
Appuyez sur Alt + Entrée sur la ligne setContentView (R.layout ... pour ajouter l'importation.
live-love

Réponses:

127

Pour tous ceux qui ont rencontré cela, j'ai remanié en renommant les dossiers d'espace de noms. J'ai juste oublié de modifier également AndroidManifest et c'est pourquoi j'ai eu cette erreur.

Assurez-vous également de vérifier cela.

Mathijs Segers
la source
1
Il semble que je ne puisse accéder à R qu'à partir de mes classes d'activités. J'obtenais cette erreur en essayant d'y accéder à partir d'autres fichiers de classe.
Joe Lapp
84

Juste pour faire simple:

import your.app.package.R;

Bien sûr, en remplaçant your.app.packagepar votre package d'application.

Dans toutes les classes qui utilisent des références de ressources R, supprimez toutes les autres importavec .R, ieimport android.R;

ocodo
la source
3
Lorsque vous utilisez Cordova, c'est la bonne solution. Testé avec Cordova 3.0.9
Peter le
1
En fait, mon erreur. Cela permet au projet Cordova de CONSTRUIRE correctement, mais l'écran de démarrage n'apparaît toujours PAS ... Donc, cette solution ne résout pas réellement le problème.
Peter le
C'est ce que j'avais besoin de faire lors de la conversion d'un projet de test Eclipse en module Android Studio.
RightHandedMonkey
Si vous utilisez phonegap et ajoutez la déclaration d'importation ci-dessus dans votre fichier de plugins, assurez-vous de supprimer la plate-forme et de l'ajouter à nouveau. Comme ça phonegap platform remove androidetphonegap platform add android
Fawaz
54

TL; DR , si vous obtenez l'erreur "le package R n'existe pas", les raisons possibles sont

  • une erreur dans les fichiers de ressources XML
    -> corriger les erreurs XML
  • le package actuel est différent du Rpackage (voir l' package attribut dans AndroidManifest.xml)
    -> importez la Rclasse, par exemple import com.example.android.R;
    -> ou utilisez le package approprié dans votre source, par exemple package com.example.android;
    -> ou modifiez l' attribut package dans AndroidManifest.xml en <manifest xmlns:android="..." package="com.example.android" ...>, si cela est approprié
  • les Ridentifiants utilisés proviennent des ressources système
    -> n'importez pas android.R, mais préfixez les identifiants incriminés avec android., par exemple, android.R.layout.simple_list_item_2
    vous pouvez importer android.Rau lieu de préfixer les identifiants bien sûr, mais vous ne pouvez plus importer la Rclasse d' application et devez préfixer les identifiants d'application, par exemple com.example.android.R.id.main_menu.

La R classe est générée automatiquement à partir des ressources de l'application. Il contient les ids de ces ressources et est contenu dans le package nommé dans la <manifest> balise du AndroidManifest.xmlfichier correspondant .

S'il n'y a aucune erreur dans les fichiers XML de ressources, la R.javasource sera générée dans un sous-répertoire de package ci gen/- dessous et compilée.


Il existe une autre Rclasse située dans le androidpackage. Cette android.Rclasse contient des classes imbriquées, qui à leur tour contiennent des ids et d'autres valeurs pour les ressources système .


Pour utiliser une classe en Java, vous devez nommer la classe avec le package complet, par exemple

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

ou importez la classe puis utilisez-la sans package

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

Vous pouvez également utiliser une classe sans nommer le package, si la classe actuelle et la classe utilisée sont dans le même package, par exemple

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}
Olaf Dietsche
la source
1
Dans mon cas, le problème était le chemin de classe 'com.android.tools.build:gradle:3.3.0'. Je l'ai changé en classpath 'com.android.tools.build:gradle:3.2.1' et le problème a été résolu.
Mohit Rajput
25

N'essayez jamais, jamais d'écrire la classe R vous-même!

Avez-vous importé la bonne classe R dans vos fichiers?

Faire

import android.R;

au lieu de

import com.example.R;

semble être le problème pour beaucoup de gens. Après le nettoyage et la construction, mes classes importent parfois la mauvaise.

J. Maes
la source
3
Mais je ne comprends pas que la chose R n'était pas là lorsque j'ai initialement codé et respecté le programme.
Taz Ryder
12

si vous développez dans le studio Android et que vous avez refactoré le nom du package, vous devez changer le nom du package dans le fichier manifeste Android et le fichier de gradle de l'application.

 applicationId "change here your package name"

et dans le fichier manifeste

 package="change here your package name"
Milon
la source
Oui. Capitalisation légèrement différente du nom de l'application, par exemple.
Steve White
9

R.java est un fichier généré automatiquement, il n'est généralement pas compilé si vous avez des erreurs dans le fichier xml.

Non Vous ne pouvez pas écrire votre propre fichier R.java, il doit être généré par le compilateur de ressources.

Recherchez les erreurs dans tous vos fichiers xml.

nandeesh
la source
1
Quels types d'erreurs et comment un débutant devrait-il les repérer?
user1725145
6

La classe R est un code Java généré automatiquement à partir de vos fichiers XML (disposition de l'interface utilisateur, chaînes d'internationalisation, etc.) Si le code fonctionnait auparavant (comme il semble), vous devez dire à votre IDE de régénérer ces fichiers d'une manière ou d'une autre. :

  • dans IntelliJ, sélectionnez Outils> Android> Générer des sources pour <projet>
  • (Si vous connaissez le chemin dans un autre IDE, n'hésitez pas à modifier cette réponse!)
DomQ
la source
Ce sont les ans que j'ai recherchés. Merci. +1
Adhikari Bishwash
5

Je suppose que cela fonctionnait mais maintenant ça ne marche plus.

Cela peut se produire si vous modifiez le nom du PACKAGE dans votre fichier MANIFEST

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

Si vous souhaitez modifier le nom du package

  1. Modifiez le nom du package manuellement dans le fichier manifeste.
  2. Cliquez sur votre classe R.java et appuyez sur F6. Cela vous permettra de déplacer la classe vers un autre package, et toutes les références à cette classe seront mises à jour.
Emanuele Greco
la source
Tu es un dieu! Je changeais mon projet de com.example.rickydam.txtbooksen com.txtbooks.txtbooksen créant un nouveau projet et j'ai tout déplacé vers le nouveau projet mais il n'a pas pu trouver R. J'ai essayé d'invalider les caches, de synchroniser avec gradle, de nettoyer le projet, de reconstruire le projet, de réinstaller les outils SDK ... Rien ne fonctionnait! Mais votre solution a résolu mon problème! Merci encore! Continuez à coder!
Ricky Dam
4

Je viens de rencontrer cette erreur lors de l'utilisation de Bazel pour créer une application 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.

Assurez-vous que votre android_library/ android_binaryutilise un AndroidManifest.xmlavec l' package=attribut correct , et si vous utilisez l' custom_packageattribut sur android_libraryou android_binary, assurez-vous qu'il est correctement épelé.

Jin
la source
3

Supprimer l'importation android.R; à partir de tous les fichiers .. une fois nettoyer le projet et construire le projet .... Il générera

rassasier
la source
3

Exemple: mon package est com.example.mypc.f01 , pour corriger l'erreur, ajoutez la ligne ci-dessous à l'activité:

import com.example.mypc.f01.R;

O Thạnh Ldt
la source
3

Voici quelques techniques que vous pouvez utiliser pour supprimer cette erreur: -

  1. Nettoyez votre projet, Buidl-> Clean Project
  2. Rebuild project, Build -> Rebuild Project
  3. Ouvrez le manifeste et vérifiez s'il manque une ressource
  4. Mise en page d'enregistrement à un identifiant particulier si manquant, ajoutez-la
  5. Si les étapes ci-dessus n'ont pas fonctionné, redémarrez Android Studio en invalidant le cache
Budhdi Sharma
la source
2

Dans mon cas, j'ai réalisé que je créais plusieurs packages dans le projet. Dans le manifeste Android, j'ai trouvé que le nom du fournisseur ne contenait pas correctement la valeur de MyContentProvider au lieu de .provider.MyContentProvider. Mon package principal (avec l'interface utilisateur) était co.companyname.database.provider au lieu de co.companyname.database.

Ensuite, sur les instructions d'importation pour la classe concernée, j'ai simplement cliqué avec le bouton droit de la souris et demandé à Android Studio (0.8.6) d'optimiser mes instructions d'importation. J'ai également noté que si vous recherchez .R dans la barre de recherche AS dans le coin supérieur droit de l'IDE, vous pouvez trouver un fichier R.java généré automatiquement qui fait partie de votre package. À ce stade, vous n'avez rien à changer. Studio doit réparer le projet après avoir corrigé le fichier manifeste Android et reconstruit.

Un autre élément est que dans une classe, je faisais usage de toString (). Length () pour évaluer une chaîne, mais je les ai échangés contre TextUtils.IsEmpty (stringVal); Je ne peux penser à rien d'autre que j'ai fait pour résoudre le problème.

J'espère que cela aide quelqu'un.

NB - Tout cela est avec AS 0.8.6

PS

R.java est généré automatiquement, alors lisez l'en-tête: / * FICHIER AUTO-GÉNÉRÉ. NE PAS MODIFIER. * * Cette classe a été automatiquement générée par l'outil * aapt à partir des données de ressources trouvées. Il * ne doit pas être modifié à la main. * /

Tommie C.
la source
2

Quand j'ai vécu cela, j'ai créé un nouveau projet et copié les fichiers de mon ancien projet vers mon nouveau.

  1. Commencer un nouveau projet
  2. Ajouter les anciens fichiers dans le nouveau projet (copier et faire un clic droit sur Layout, drawables, com.packagename, ...) pour coller mes anciens fichiers projets

Cependant, j'avais toujours le même problème: R does not exist. Ensuite, j'ai réalisé que j'avais copié et collé le manifeste de mon bloc-notes dans les manifestes Android Studio et que je n'avais pas changé le nom du package dans le fichier manifeste.

Par conséquent, une fois que j'ai changé le nom du package dans le manifeste par le nouveau nom du projet, le nouveau projet que j'avais créé fonctionnait bien.

Jesús Rojo
la source
1

Quels fichiers importez-vous dans les fichiers qui reçoivent l'erreur R?

Ma compréhension du fichier R est qu'il s'agit de listes de références générées automatiquement pour tous les attributs de l'application Android. Par conséquent, vous ne pouvez pas le changer vous-même.

Utilisez-vous Eclipse pour créer ce projet? Les anciens projets ont-ils eu ces erreurs avant de mettre à jour Eclipse? Quelles sont les références qui obtiennent des erreurs?

Assurez-vous que vous n'avez pas importé un autre fichier R à partir d'un autre code copié dans une autre application.

Singe de musique
la source
J'ai eu des problèmes avec R lorsque le fichier AndroidManifest.xml et le fichier project.properties dans le projet n'affiche pas la même version cible / minimale d'Android.
Music Monkey
1

Je rencontre ce problème à chaque fois que je change d'ordinateur et que je tente d'importer d'anciens projets à partir de fichiers transférés via une clé USB.

Ma solution de contournement consiste simplement à créer un nouveau projet et à copier (faire glisser) les fichiers dans l'EDI (actuellement en utilisant Netbeans) et à les reconstruire. C'est un ennui et un peu une solution pirate, mais cela résout le problème.

Si cela vous arrive, dans le pire des cas, vous devrez peut-être sauvegarder vos fichiers, supprimer le projet et simplement y faire glisser les fichiers et les recompiler. J'espère que cela n'arrivera pas à cela, mais ce serait votre option nucléaire.

user5101322
la source
1

Vous pouvez essayer

Menu principal d'Android Studio> Fichier> Invalider les caches / redémarrer ...

Cliquez sur le bouton invalider le cache / redémarrer pour redémarrer votre projet

Résolvez à nouveau R.xxxx.xxx si une partie de la classe de fragment de classe R ne s'est pas résolue correctement

puis reconstruisez votre projet

J'espère que ça aide

Ethan Liew
la source
0

Si vous rencontrez cette erreur dans Android Studio:

Vérifiez le (s) fichier (s) du module Gradle -> defaultConfig -> paramètre applicationId.

Vérifiez la balise de package AndroidManifest.xml -> manifeste.

Vérifiez les déclarations de package dans tous les fichiers java src.

Synchronisez, nettoyez puis reconstruisez avec Gradle.

NE JAMAIS créer votre propre fichier R. R est généré automatiquement à partir de vos fichiers java source et des paramètres de construction.

rask004
la source
0

J'avais: "erreur: le package R n'existe pas" et j'ai supposé que javac n'avait pas accès à R.java.
J'ai donc ajouté% PROJ_LOC% \ gen au chemin source, et cela a fonctionné! SOURCEPATH =% PROJ_LOC% \ src;% PROJ_LOC% \ gen

Je n'utilise pas Android Studio ou Ant (ou XML).

bavarder
la source
0

Si cette erreur apparaît après la résolution des conflits de fusion, un simple projet Build -> Clean peut aider.

Dmitry Smolyaninov
la source
0

Je viens de me débarrasser de l'erreur dans mon projet. J'avais importé un exemple de projet, j'avais changé les dossiers du package mais je n'avais pas mis à jour le package dans l'un des fichiers java.

La cause la plus probable de cette erreur «le package R n'existe pas» est que le nom du package dans Java ou le fichier manifeste est incorrect. Assurez-vous qu'il est correct et synchronisé, puis effectuez une nouvelle génération.

Ajay B
la source
0

Parfois, il est résolu lorsque vous réimportez simplement le projet dans Android Studio.

Aung Pyae
la source
0

Mauvais chemin: le projet "casse" les pointeurs vers les images et si vous avez apporté des modifications de nom au chemin, par exemple un package ou des dossiers refactorisés. Ensuite, écrivez simplement à nouveau la lettre R et l'éditeur suggère le bon chemin et cela fonctionnera. Dans ce cas, vos noms de fichiers sont corrects et le contenu référencé dans le pointeur R. est présent mais le chemin est incorrect, donc clean et build ne fonctionneront pas.

Patrik Rikama-Hinnenberg
la source
0

Un autre cas de rupture de R. est le traitement des annotations .

Certains traitements peuvent faire référence à des classes situées dans certains dossiers ou niveaux de dossier. Si vous déplacez les classes requises vers un autre emplacement, vous pouvez obtenir R. comme classe inconnue.

Malheureusement, le pointeur d'erreur vers ce problème n'est pas évident dans Android Studio.

Zon
la source
0

Aucun avantage à écrire vous-même R.java car il est modifié à chaque build,

N'oubliez pas d'utiliser R. quelque chose, par exemple: R.raw.filename à l'intérieur des classes dont la valeur de package est similaire à la valeur de package dans AndroidManifest.xml

parce que les ID de ressources R. sont définis pour l'application ou la bibliothèque en cours et qu'ils sont tous vérifiés s'ils existent au moment de la compilation, il n'est donc pas logique de leur permettre d'accéder à partir d'un «code» qui ne cible pas l'application ou la bibliothèque en cours et peut être utilisé dans d’autres endroits.

Mustafa R.Mahdi
la source
0

J'ai oublié d'ajouter le "nom" de mon "package" en haut de ma classe java. Vérifiez si le vôtre est réellement ajouté.

JÉSUS-CHRIST EST LA SEULE MANIÈRE
la source
-2

Je résous mon problème:

le package R n'existe pas

.

Aller au AndroidManifest.xmlfichier et changer le minSDKVersion="17"de 19

Fazal
la source
Je ne suis pas d'accord. Vous ne devriez pas avoir minSDKVersion dans le fichier AndroidManifest.xml selon les normes actuelles. Si vous l'avez, supprimez-le du fichier AndroidManifest.xml, il s'agit d'un code redondant. La minSDKVersion et la targetSdkVersion doivent être définies dans le fichier build.gradle uniquement.
Ajay B