web-dev-qa-db-fra.com

La magie derrière le fichier R.Java

Récemment, j'ai eu quelques problèmes avec le fichier R.Java. Maintenant, j'ai décidé de faire une sauvegarde et de supprimer le fichier pour voir ce qui se passe.

Rien ne s'est passé, j'ai donc créé un fichier R.Java vide et espéré le meilleur. Maintenant, Eclipse semble comprendre que le fichier a été falsifié et même émettre un avertissement:

R.Java was modified manually! Reverting to generated version!

Et c'est tout ce qu'il y a. J'ai essayé de le construire manuellement mais sans résultat. 

Donc, j'ai deux questions:

  1. que dois-je faire pour forcer Eclipse à régénérer le fichier
  2. que se passe-t-il ici? Comment le fichier est-il créé, où se trouve le code qui le génère?

J'apprécierais toute aide. Comme d'habitude, le problème est survenu quelques jours avant la date limite :)

18
LambergaR

J'ai trouvé le problème - j'ai créé une image 9patch avec la zone de patch définie uniquement sur l'axe des Y (j'essayais d'empêcher le redimensionnement de l'autre).

La question demeure: pourquoi n'y a-t-il pas d'avertissement concernant l'erreur? Ou s'il y a - où est-il enterré?

3
LambergaR

J'ai eu un problème pour compiler mon application Android, avec des erreurs apparemment inexplicables sur l'échec de la génération de R.Java. 

Le problème était dû au fait que j'avais précédemment tué l'émulateur Android lors de la construction. Ne fais pas ça! Un indice était l'apparition de plusieurs fichiers * .out.xml laissés.

La solution consistait à sélectionner le projet, à cliquer sur Projet-> Nettoyer, puis sur supprimer manuellement tous les fichiers * .out.xml . Ce n’est qu’alors que je pourrais cliquer sur Exécuter-> Exécuter pour réussir la construction.

Une dernière chose: j'utilise Eclipse. Je devais m'assurer que le projet était sélectionné dans Package Explorer et pas juste un fichier source aléatoire. Facile à ne pas remarquer!

15
Stan Mohler Jr.

R.Java est généré automatiquement lors de la construction. Son contenu est basé sur les fichiers de ressources (y compris les dispositions et les préférences). 

Lorsque vous l'avez supprimé, il a été recréé, mais si vous créez le vôtre, vous aurez des problèmes car le système de construction ne le remplacera pas.

Vous pouvez simplement le supprimer à nouveau (manuellement ou en choisissant Projet-> Nettoyer) et reconstruire votre programme.

7
Tomas

J'ai eu ce problème plusieurs fois, et la plupart du temps, il est causé par une erreur dans les fichiers "res". Vérifiez que tout est OK dans tous vos fichiers res, principalement XML, et que vous pouvez ensuite créer.

Par exemple, deux causes courantes de ce problème peuvent être:

  • Le nom d'une propriété dans un style dans un fichier XML n'a pas été correctement orthographié.

  • Ne ferme pas correctement une chaîne dans le XML d'un fichier de paramètres régionaux.

4
Antonio

J'ai eu le même problème et c'est que j'avais nommé un fichier de ressources (une image .png) en utilisant des lettres majuscules. (ImageButton001.png au lieu de imagebutton001.png).

Après avoir changé le nom du fichier, mon R.Java est revenu.

Rgards, Juan

2
Juan

Si la mémoire disponible est insuffisante, l'outil de génération échouera de manière silencieuse (Eclipse ne montrera aucune erreur ni ne rapportera rien dans le journal des erreurs). Fermez les autres applications ouvertes (émulateur et navigateur, par exemple), puis ajoutez un espace au fichier manifeste de l’application et enregistrez-le. 

2
Lawrence

Désolé, mais essayez de vérifier le résultat dans Eclipse. Peut-être avez-vous des erreurs qui empêchent Eclipse de terminer le processus de construction (vérifiez votre fichier AndroidManifest.xml, est-il correct?). Je veux dire que vous devez vérifier tous vos fichiers de ressources (string.xml, mises en page, ...) et interfaces (* .aidl), il peut y avoir des problèmes (syntaxe incohérente, ou quelque chose ...) qui empêchent Eclipse de générer R.Java.

2
ponkin

J'ai eu ce problème, pour reconstruire R.Java j'ai coupé le code dans le fichier xml sur lequel je viens de travailler (ou essayer d'autres si cela ne fonctionne pas), en supprimant le fichier puis en créant un autre avec le même nom et en collant le retournez dans le code. J'espère que cela t'aides.

1
Jamesad

J'ai eu un problème similaire, j'avais renommé un fichier .wav dans le dossier Raw avec une lettre majuscule. Lorsque je suis passé en minuscule, j'ai nettoyé le projet et il a reconstruit R.Java amende.

1
nwestwood

Comme Ponkin l'a déclaré - vous avez probablement un seul problème qui empêche R de se générer de nouveau, ce qui explique pourquoi vous avez maintenant un million de problèmes.

N'essayez pas de créer la classe R vous-même. Essayez de penser au dernier XML que vous avez manipulé et vérifiez les erreurs.

J'ai eu le même problème ici

1
zorglub76

Comme d'autres l'ont déclaré, évitez de créer votre propre fichier R.Java. J'ai rencontré le même problème lorsque j'ai débuté avec Android, et il a fallu un certain temps pour déterminer la cause des erreurs de compilation.

Qu'essayiez-vous de faire avec le fichier R.Java?

1
duanemat

J'ai trouvé qu'une ressource indésirable causait un problème. Dès que j'ai supprimé la ressource, R.Java a été générée.

1
FHan

Ce qu’il est bon de savoir, c’est que si un fichier XML contient un?, Alors R.Java n’est pas régénéré et l’erreur n’apparaît pas dans le fichier XML (elle s’affiche parfois après un certain temps) Si vous avez un ligne similaire à:

< string name="questionmark"\>?< /string> <br> 

essayer de changer le? à quelque chose d'autre et voir ce qu'il advient du fichier R.Java - a fonctionné pour moi

1
Jacob

J'ai eu le même problème. Je suis juste allé à: 

Project -> Properties -> Android 

et choisi le bon émulateur pour mon projet, j’avais 3 choix différents à choisir à ce moment-là. J'ai réalisé que j'avais changé d'émulateur à un moment donné. Alors essayez de changer l'émulateur, cela pourrait aider!

Bonne chance

1
Oliver

Assurez-vous qu’il n’ya pas d’erreur dans votre fichier manifeste. Si vous supprimez la chaîne de ressource app_name dans /res/values/strings.xml, il ne sait pas comment générer un droit R.Java. J'ai trouvé cela problématique lors du tutoriel HelloSpinner.

1
Sven

J'ai eu le même problème avec IntelliJ. Le problème était que j'avais app_name défini deux fois dans strings.xml Pour une raison quelconque, IDEA inspections ne l'ont pas détecté automatiquement.

0
Matt Hansen

J'avais un problème similaire. Le projet de nettoyage ne résolvait pas le problème et il n'y avait pas d'erreur dans le code, ni les majuscules ni les espaces dans les noms de fichiers.

La solution passait à une fenêtre contextuelle qui apparaissait lorsque vous avez choisi PROJECT -> CLEAN, puis décochez la case "Démarrer immédiatement la construction". Nettoyez le projet. Fermez et rouvrez Eclipse, puis construisez le projet (PROJECT -> BUILD).

Reste à savoir pourquoi nettoyer et construire sans fermer Eclipse n'a pas fonctionné. 

0
Pavi3l

En remarque, ces fichiers * .out.xml sont généralement générés en essayant de construire votre projet alors qu'un fichier xml est sélectionné dans l'éditeur.

0
LairdPleng

J'ai lu ceci sur un autre site et cela m'a aidé:

"Si cela ne résout pas votre problème, essayez de modifier votre AndroidManifest.xml (ajoutez simplement un espace et enregistrez). J'ai entendu dire que cela forcerait le R.Java à se reconstruire."

Il suffit donc d'ajouter un espace dans le fichier manifeste, puis de reconstruire!

0
Jonas