Développer pour Android dans Eclipse: R.java ne se régénère pas

309

J'ai découvert que mon R.java n'est jamais mis à jour, donc il ne contient pas d'informations sur mes nouvelles ressources, j'ai donc décidé de le supprimer et j'ai pensé qu'Eclipse en générerait une nouvelle. Mais cela ne s'est pas produit et je n'ai plus R.java maintenant. Comment puis-je en régénérer un?

J'utilise Windows 7.

D'après l'un des commentaires: "Faire Project -> Clean est ce qui m'a causé le problème. Le nettoyage supprime R.java ... et pour une raison quelconque, le plugin ne régénère pas le fichier."

Peter Mortensen
la source
ma solution lors du nettoyage n'a pas fonctionné: j'avais besoin de télécharger Build Tools dans le SDK manager puis de redémarrer le système. J'ai ADT 22.3.0.
Moradnejad

Réponses:

177

Ce site propose:

si vous exécutez un nettoyage sur le projet, il devrait régénérer tous les fichiers Java générés, à savoir R.

...et...

Dans Eclipse, sous le menu Projet, une option est créée automatiquement. Cela vous aiderait à créer le fichier R.java à chaque modification. L'option Nettoyer ... est également disponible sous Projet.

Ce site propose une autre solution.

aioobe
la source
1
Qui aurait pensé, merci les gars +1 ici, j'ai eu un problème avec ma mise en page et donc R.Java n'a pas été créé. Grands chefs! À votre santé.
101
Faire Projet-> Nettoyer est ce qui m'a causé le problème. Le nettoyage supprime R.java ... et pour une raison quelconque, le plugin ne régénère pas le fichier.
Cerin
7
J'ai eu ce pop-up lorsque je me suis lié à une bibliothèque qui nécessitait une version d'API de support Android différente de celle que j'avais installée. Les dépendances n'ont pas fonctionné et mon R n'a pas été généré par la suite. Comme d'autres l'ont dit, cela apparaît dans le journal des erreurs, alors vérifiez-le.
mikebabcock
1
Dans mon cas, le nettoyage du projet supprime simplement R.java, au lieu de le régénérer. stackoverflow.com/questions/13065425/…
RobinJ
96
R.java ne se régénère pas si vous avez des erreurs dans le répertoire res. Erreurs supprimées -> problème résolu dans mon cas :)
JavaRunner
300

J'ai trouvé que ça m'arrivait avec une mise en page cassée et tout explose. Détendez-vous, c'est comme cette vieille erreur lorsque vous avez appris la programmation C pour la première fois où vous oubliez un point-virgule et cela génère une centaine d'erreurs. Beaucoup de panique, appuyez sur tous les boutons, et aggrave les choses.

Solution

  • Assurez-vous que tout ce vers quoi les R.liens ne sont pas rompus. Corrigez toutes les erreurs dans vos fichiers XML . Si quelque chose dans les ADK est cassé, Rne se régénérera pas.
  • Si vous avez touché quelque chose et créé quelque chose import android.Rdans votre activité, supprimez-le .
  • Exécutez Project -> Clean . Cela supprimera et régénérera R et BuildConfig.
  • Assurez-vous que Projet -> Construire automatiquement est coché. Sinon, créez-le manuellement via Menu -> Project -> Build Project.
  • Attendez quelques secondes que les erreurs disparaissent.
  • Si cela ne fonctionne pas, supprimez tout dans le dossier / gen /
  • Si cela ne fonctionne toujours pas, essayez de cliquer avec le bouton droit sur votre projet -> Outils Android -> Corriger les propriétés du projet .
  • Vérifiez vos fichiers * .properties (dans le dossier racine de votre dossier d'application) et assurez-vous que les liens ne sont pas rompus.
  • Cliquez avec le bouton droit sur votre projet> propriétés> Android . Regardez les sections Project Build Target et Library sur le côté droit de la page. Votre cible de build doit correspondre à la cible dans votre AndroidManifest.xml. Donc, s'il est défini sur la cible 17 dans AndroidManifest, assurez-vous que le nom cible est Android 4.2. Si votre bibliothèque a un X sous la référence, supprimez et rajoutez la bibliothèque jusqu'à ce qu'il y ait une coche verte. Cela peut se produire si vous avez déplacé quelques fichiers et dossiers.

Que faire si R ne se régénère pas

Cela se produit généralement lorsque vous avez un fichier XML cassé.

  • Vérifiez les erreurs dans vos fichiers XML, principalement dans le /res/dossier
  • Les lieux communs sont /layout/et /values/, surtout si vous en avez changé un récemment
  • Vérifiez AndroidManifest.xml. Je trouve que souvent je change une chaîne et oublie de changer le nom de la chaîne AndroidManifest.xml.
  • Vérifiez qu'il Android SDK Build-toolsest installé. Fenêtre -> Android SDK Manager -> Tools -> Android SDK Build-tools
  • Assurez-vous que lorsque vous mettez à jour le Android SDK Tools, vous mettez également à jour le Android SDK Platform-toolset Android ADK Build-tools. La construction échoue silencieusement si elles ne correspondent pas.
  • Si vous ne trouvez pas le problème, cliquez avec le bouton droit sur / gen / -> Restaurer à partir de l'historique local ... -> cochez R.java -> cliquez sur Restaurer . Même s'il ne résout pas le problème, il effacera les erreurs supplémentaires pour faciliter la recherche du problème.
Muz
la source
21
cela devrait être la meilleure réponse!
john.k.doe
6
En effet, cela m'a fait réaliser que mon environnement avait encore besoin d'une mise à jour des outils.
woodleg.as le
11
Fenêtre-> Android SDK Manager-> Tools-> Android SDK Build-tools c'est la solution pour moi, voté positivement
1
J'ai lu des dizaines de réponses et seulement celle-ci a mentionné la vérification des outils de construction du SDK. Je laisse aveuglément eclipse télécharger et installer tous mes outils Android quand il le propose. Il a complètement raté cette partie.
Justin Aquadro
1
Vérifiez la console, peut vous donner une erreur détaillée qui doit être corrigée, puis vous pouvez construire. Cela a aidé dans mon cas
David72
40

J'ai eu le même problème. Lorsque je l'ai vérifié, j'ai constaté que le nom de la ressource XML sous mise en page n'avait pas la bonne convention de dénomination. Il y avait des majuscules. Je l'ai donc renommé pour que toutes les lettres soient en minuscules et la magie a fonctionné.

Amit Kumar
la source
2
tnx ... idiot me pensant que je pourrais utiliser les majuscules dans mes noms de mise en page
Kevin
a aussi fonctionné pour moi: la console a signalé ceci: [2010-09-22 16:19:40 - monprojet] res \ drawable-ldpi \ downloadNow.png: Nom de fichier invalide: ne doit contenir que [a-z0-9_.]
sami
1
Merci, c'était mon problème. J'avais un fichier .xml dans le dossier de mise en page avec une majuscule, et tout mon fichier R.java manquait / ne serait pas généré à cause de cela. La seule façon de le savoir était de se rendre compte que la convention de dénomination ne permettait pas un capital; aucune erreur n'a été générée.
Lemmings19
1
Lorsque vous nommez des fichiers de ressources ou des attributs, essayez de les nommer comme vous nommez une variable en Java. la classe R. met les ressources, c'est-à-dire les noms de fichiers id, drawable, xml avec une constante finale statique publique, donc mettre "-", "caractère spécial" conduirait à arrêter de générer R, car ces symboles peuvent avoir d'autres moyens arithmétiques.
IronBlossom
1
Oui, c'était le problème pour moi. Un fichier dans mon res / xml fait référence à un fichier de mise en page qui n'existait pas, et apparemment, cela ne génère pas R.java, donc si je lance Clean, cela a causé un R.java manquant, entraînant des centaines d'erreurs d'importation ...
Cerin
28

L'une des raisons pour lesquelles la classe R. peut disparaître soudainement est qu'il y a des erreurs dans vos fichiers XML. Par exemple, lorsque vous ajoutez un fichier XML avec des lettres majuscules dans le nom comme myCoolLayout.xml, ce qui n'est pas autorisé. Ou lorsque vous avez des références qui ne pointent pas vers des fichiers existants, etc.

Pawel
la source
17

Dans Eclipse, utilisez simplement Project -> clean pour nettoyer le projet. Le R.java va être (re) créé automatiquement.

Si, pour une raison quelconque, cela ne fonctionne pas: assurez- vous que vos fichiers layout.xml ne contiennent pas d'erreurs. Eclipse semble être un peu bogué ici: parfois, il ne marque pas les erreurs dans le XML ni dans l'explorateur de packages. Dans un tel cas: jetez un œil à la vue "console" ou "problèmes" après avoir utilisé "nettoyer". Toutes les erreurs doivent y être affichées. Réparez-les et refaites un nettoyage.

REMARQUE: il n'est PAS nécessaire de corriger les erreurs que vous obtenez en raison d'un fichier R manquant! Corrigez simplement les fichiers XML et autres erreurs de projet et utilisez clean!

masi
la source
Assurez-vous que vos conventions d'appellation des fichiers de ressources sont correctes. @Masi merci pour votre astuce de recherche dans "console" pour les erreurs après le nettoyage. cela m'a aidé.
Bharath Booshan
10

Solution rapide:

Le nom du package dans le manifeste doit être le même que celui du /srcdossier, le /genpackage du dossier sera automatiquement reproduit.

Observation détaillée:

Observez le nom du package dans le /gendossier. Dans mon cas, c'était différent de celui du /srcdossier.

Le package référencé dans le manifeste était celui du /gendossier.

J'ai essayé d'ajouter un package avec le nom du /srcdossier au dossier pour /genvoir ce qui se serait passé, mais cela n'a pas résolu le problème. J'ai ensuite procédé à la suppression du nom du package qui n'était pas le même que le nom du package du /srcdossier. Ce package avec le nom qui ne correspondait pas au /srcdossier a été recréé dès que je l'ai supprimé.

Étant donné que la référence de package dans le manifeste correspond à celle qui était insensément recréée et qui ne correspondait pas avec le package dans le /srcdossier, cela a incité à renommer package = "oldPackage"avec le package = "srcFolderPackage".

androidWorkerTheEighth
la source
9

J'ai eu le même problème, et j'ai finalement trouvé le problème: dans le strings.xml, je n'ai pas conservé la ligne <string name="app_name">program-name</string>qui est présente par défaut lors de la création d'un nouveau projet Android. Je pensais qu'il n'était utilisé que pour le programme HelloWord, qui est le programme d'origine.

Cependant, AndroidManifest.xml fait référence à cette valeur, d'où:

=> Une erreur de compilation;
=> le R.java n'est pas mis à jour;
=> Les identifiants ne sont pas reconnus ...

Glaux
la source
la ligne dans string.xml est "<string name =" app_name "> nom du programme </string>". Désolé, j'ai eu un problème avec mon message.
Glaux
9

Android a ajouté l'outil de construction SDK ADT 22 pour le mécanisme de construction. Il vous suffit de suivre les étapes suivantes.

  1. Mettre à jour l'outil SDK Android
  2. Mettre à jour l'outil de plate-forme SDK Android
  3. Mettre à jour l'outil de création de SDK Android
  4. Ajoutez le chemin de votre outil de construction à la variable de chemin. (chemin jusqu'à ---- VOTRE RÉPERTOIRE-CHEMIN \ android-sdk \ build-tools)

Cela résoudra le problème.

Amol
la source
Ma réponse est la seule qui se rapporte à la question. encore obtenu seulement 3 votes. étrange!
Mr.India
8

Si votre R.java n'est pas généré, l'une des solutions est de supprimer le fichier de mise en page nommé "blabla.out.xml".

Après avoir supprimé ce fichier, essayez de nettoyer le projet dans le menu Projet -> Nettoyer .

Shashank
la source
7

Comme généralisation de la réponse de Glaux, si vous avez des erreurs dans le resrépertoire, R.java peut ne pas générer - même si vous nettoyez et reconstruisez. Résolvez d'abord ces erreurs.

Par exemple: lorsque vous ajoutez un fichier image de disons, "myimage-2.jpg", le système considérera cela comme une erreur, car les noms de fichiers sont limités aux valeurs alphanumériques. Faites un rafraîchissement sur votre répertoire «res» après avoir ajouté des fichiers et regardez la sortie dans la fenêtre de votre console pour tout avertissement de nom de fichier.

Abel
la source
Exactement! Cela m'arrive de temps en temps lorsque je renomme des chaînes dans mon strings.xml. Cela peut créer des références pendantes dans mes fichiers de mise en page. Et cela inhibe la production de R.java. Dommage qu'il n'y ait aucun moyen de refactoriser les ID XML.
Scott Biggs
6

Si votre système d'exploitation est Ubuntu, je peux fournir quelques suggestions:

  1. Installez ou mettez à niveau ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Vérifiez si vous avez la bonne autorisation sur le dossier aapt:

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

    sudo eclipse
  4. Exécuter le projet -> Nettoyer dans Eclipse

Nevin Chen
la source
excellent. et cela fait aussi fonctionner adb. Rappelez-moi simplement que je devrais l'installer lors de la réinstallation d'ubuntu.
Yeung
la même solution est vraie pour Debian amd64
Markus Peröbner
Cette réponse stackoverflow.com/questions/19523502/… fournit des instructions plus fraîches, ia32-libs n'existait pas sur Elementary
Singagirl
6

Vous avez 100% une erreur dans un fichier XML , mais la vérification XML ne vous montre pas l'erreur. C'est la raison pour laquelle vous devez d'abord vérifier vos fichiers XML!

Erdinc Ay
la source
5

Il est TOUJOURS utile de jeter un œil à l' onglet Problèmes dans Eclipse. Dans mon cas, j'obtenais un message d'erreur " Android incapable de résoudre la cible 'android-8' " qui empêchait la génération de R.java. J'ai donc corrigé la cible importée à celle que j'utilisais dans le fichier default.properties , puis j'ai effectué un nettoyage via Projets-> Nettoyer et le tour est joué! R.java est généré automatiquement! J'espère que ça aide!

goseib
la source
Merci d'avoir pointé l'onglet problèmes. Je suis nouveau sur Android et Eclipse, donc je ne l'ai pas utilisé avant et je devenais frustré. C'est le premier endroit à regarder lorsque vous rencontrez cette erreur.
Maadinsh
4

Nettoyer le projet, fermer Eclipse, le rouvrir et lancer mon projet a finalement fait réapparaître mon R.java ... J'espère que ça aide

Filippo Mazza
la source
J'ai aussi dû redémarrer, Eclipse se plaignait de manquer aapt mais il était présent ....
Filippo Mazza
4

Assurez-vous que vous n'importez pas

android.R;

Zain Ali
la source
4

R.java ne sera jamais généré s'il y a des erreurs dans le resdossier. Par exemple, dans le sous-dossier drawable, il y a deux fichiers qui portent le même nom, l'un est icon.png et l'autre est icon.html.

Vous pouvez voir une erreur dans la fenêtre de journal de la console Eclipse qui dit "L'icône d'entrée de ressource est déjà définie.". Après avoir supprimé icon.html, vous pouvez nettoyer ou simplement supprimer le gendossier. Vous constaterez que R.java est créé.

Peter Mortensen
la source
4

J'ai constaté que tout fichier contenant des majuscules dans le resdossier créera cette erreur. Cela m'est arrivé avec un fichier PNG que j'ai ajouté et oublié.

Peter Mortensen
la source
3

Après avoir lu de nombreux articles et vidéos YouTube, j'ai constaté que chacun de nous R.javamanquait pour différentes raisons.

Voici comment j'ai corrigé cela dans Eclipse:

  • Créez R.java dans le gendossier manuellement et enregistrez.
  • Après cela, allez dans Project et cliquez sur "Clean"

Le message suivant s'affiche et votre fichier est automatiquement réécrit:

R.java a été modifié manuellement! Revenir à la version générée!

Anup Singh
la source
1
Anup ..J'ai fait ça /// Mais seulement pour être retiré quand je l'ai nettoyé ... Le problème n'est toujours pas résolu pour moi!
ejjyrex
3

Pour moi, j'avais lié v7 appcompat deux fois. Quoi qu'il en soit, dans Eclipse, cliquez avec le bouton droit sur le nom du projet dans l'Explorateur de packages ou le Navigateur, accédez à Propriétés, Android et décochez les doublons dans la section Bibliothèque. Vous devrez peut-être compiler -> nettoyer ensuite.

Shanker Kaura
la source
2

Il n'y a évidemment pas de réponse définitive à cela, mais en voici une autre que je ne vois pas déjà:

J'ai R.javadisparu après (avoir tenté) une synchronisation d'équipe et il y avait des fichiers de résolution de conflits dans le projet (c.-à thingy.xml.mine-d thingy.xml.r35.,, Etc.). Les supprimer / résoudre les conflits régénérés R.

Ben Mosher
la source
2

J'ai eu ce problème. J'ai accidentellement supprimé ceci

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

qui a commencé à provoquer des erreurs de construction partout dans le projet dans mes fichiers XML ainsi que mes fichiers Java. Dès que j'ai retapé ce que j'ai supprimé, cela a fonctionné à nouveau :)

Mohamed El-Saka
la source
2

OK, il est donc clair qu'il peut y avoir beaucoup de causes à ce problème. Si vous êtes sur une machine Linux 64 bits et que vous venez de configurer l'ADT pour la première fois, vous pouvez rencontrer ce problème où R ne se génère pas automatiquement. Vérifiez l'onglet de la console et vous pouvez voir une erreur similaire à:

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

Si c'est le cas, vous devez installer ia32-libs, en utilisant quelque chose comme:

 sudo apt-get install ia32-libs

Voir ici pour plus de détails: adb Android introuvable

Patrick
la source
2

J'ai rencontré ce problème plusieurs fois. J'ai constaté que si je n'avais pas importé le package R via le nom de mon application, par exemple, si mon application avait le nom de package example.test, j'ai constaté que je devais importer example.test.R pour accéder à l'un des Ressources.

Si cela n'a pas été importé, les ressources qui ont été renvoyées étaient les ressources par défaut, aucune des miennes n'étant incluse.

Cela dit, si vous constatez que vous obtenez uniquement une liste de ressources par défaut, vérifiez simplement que vous importez application_package_name.R et non android.R.

Peter Mortensen
la source
2

Mon problème était qu'il appcompatn'était pas dans le même répertoire que mon projet.

J'ai découvert cela lors de la compilation de mon application avec Ant .

Martin
la source
1

Assurez-vous également que vous disposez de la dernière version du plug-in ADT et ouvrez le gestionnaire du SDK Android pour mettre à jour tous les outils du SDK vers la dernière version. Recherchez également les mises à jour dans Eclipse. Les versions non correspondantes m'ont causé le problème.

croasser
la source
1

Mon problème était dans un fichier de menu. Le compilateur ne semble pas vous avertir si des chaînes qui n'existent pas à l'intérieur strings.xmlsont référencées dans les fichiers de menu. Vérifiez si vos itemfichiers XML dans votre menu font référence à des chaînes qui n'existent pas dans votre fichier strings.xml. Habituellement android:title.

Stefan Anca
la source
1

Pour moi, cette erreur a été provoquée lorsque j'ai essayé de dupliquer un existant res/menuau lieu d'en créer un avec le wizard.

Hakim
la source
1

Toutes ces réponses ne pourraient pas fonctionner si vous utilisez Maven. La solution pour moi était d'ajouter

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

à la section de configuration du plugin android-maven.

Bevor
la source
1

J'ai trouvé une solution pour laquelle R.class n'est pas fabriqué par Eclipse après l'avoir fait à nouveau - 2 nettoyer, construire, etc.

Le problème est ici dans strings.xml:

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

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

Ceux-ci sont créés par défaut par Eclipse lorsque vous créez des projets.

Certainement, vous modifiez le fichier strings.xml pour vos propres besoins. Parfois, vous effacez les deux lignes string.xml de votre code:

Cela pose un problème dans le fichier AndroidManifest.xml:

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

Il ne peut donc pas communiquer avec strings.xml.

aarifmkhan
la source
1

J'ai changé le nom de mon fichier XML de mise en page et j'ai découvert plus tard que le fichier XML (fournisseur de widgets dans ce cas) fait toujours référence à l'ancien XML de mise en page qui n'existe pas, et qui empêchait la génération / correction automatique de la classe R.

Howard
la source