Développement pour Android dans Eclipse: R.java Non régénérant
j'ai découvert que mon R.java n'est jamais mis à jour, donc il ne contient pas d'informations sur mes nouvelles ressources, donc j'ai décidé de l'effacer et j'ai pensé Qu'Eclipse en produirait une nouvelle. Mais ce n'est pas arrivé, et je n'ai pas R.java tout de suite. Comment puis-je régénérer?
J'utilise Windows 7.
de l'un des commentaires: "faire projet - > propre est ce qui a causé le problème pour moi. Nettoyage suppressions R.java...et pour quelque raison que ce soit, le plugin ne régénère pas le fichier."
30 réponses
ce site suggère:
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, est une option construire automatiquement. Cela vous aiderait à construire le R.java les modifications sont faire. propre... option est également là dans le cadre du projet.
ce site suggère une autre solution.
j'ai trouvé ça en train de m'arriver avec une maquette cassée et tout explose. Relax, c'est comme cette vieille erreur quand tu as appris à programmer C où tu oublies un point-virgule Et il génère une centaine d'erreurs. Beaucoup paniquent, appuient sur tous les boutons, et aggravent les choses.
Solution
- assurez-vous que les liens
R.
ne sont pas rompus. corriger toutes les erreurs dans vos fichiers XML . Si tout ce qui est dans les ADK est cassé,R
ne se régénérera pas. - si vous avez frappé quelque chose et créé
import android.R
dans votre activité, supprimez-le . - Exécuter Projet -> Clean . Cela supprimera et régénérera R et BuildConfig.
- assurez-vous que projet - > construire automatiquement est coché. Si ce n'est pas le cas, construisez-le manuellement via
Menu -> Project -> Build Project
. - Attendre quelques secondes pour les erreurs de disparaître.
- si cela ne fonctionne pas, supprimez tout ce qui se trouve dans le répertoire/ gen /
- si cela ne fonctionne toujours pas, essayez clic droit sur votre projet- > Outils Android - > correction des propriétés du projet .
- Vérifier *.propriétés fichiers (dans le dossier racine de votre dossier app) et assurez-vous que les liens y sont pas cassés.
- faites un clic droit sur votre Projet > Propriétés > Android . Regardez les sections "objectif de construction du projet" et "Bibliothèque" sur le côté droit de la page. Votre cible de construction devrait correspondre à la cible dans votre AndroidManifest.XML. Donc si c'est réglé sur la cible 17 dans AndroidManifest, assurez-vous que le nom de la 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 touche verte. Cela peut se produire si vous avez déménagé quelques fichiers et dossiers.
Que faire si R ne se régénère pas
cela se produit généralement quand vous avez un fichier XML cassé.
- vérifiez les erreurs dans vos fichiers XML, principalement dans le dossier
/res/
1519210920" - lieux communs sont
/layout/
et/values/
, surtout si vous avez changé l'un d'eux récemment - Vérifier
AndroidManifest.xml
. Je trouve que souvent je change une chaîne de caractères et oublie de changer le nom de la chaîne de caractères deAndroidManifest.xml
. - vérifier que
Android SDK Build-tools
est installé. Window -> Android SDK Manager -> Outils -> version du SDK Android-outils - assurez-vous que lorsque vous mettez à jour le
Android SDK Tools
, vous mettez également à jour leAndroid SDK Platform-tools
etAndroid ADK Build-tools
. La construction échoue silencieusement si elles ne correspondent pas. - si vous Je ne trouve pas le numéro, clic droit /gen/ -> restaurer de l'histoire locale... - >TIC R.java - > cliquez sur Restaurer . Même si cela ne résout pas le problème, cela effacera les erreurs supplémentaires pour rendre le problème plus facile à trouver.
j'ai eu le même problème. Quand j'ai vérifié, j'ai découvert que le nom de la ressource XML sous layout n'avait pas la convention de nommage correcte. Il y avait quelques lettres majuscules. Donc je l'ai renommé pour faire toutes les lettres minuscules et la magie a fonctionné.
L'une des raisons pour lesquelles R.class peut disparaître soudainement est quand il ya des erreurs dans vos fichiers XML. Par exemple, lorsque vous ajoutez un fichier XML avec des lettres majuscules dans le nom comme myCoolLayout.le xml, ce qui n'est pas autorisé. Ou lorsque vous avez des références qui ne pointent pas vers des fichiers existants, etc.
dans Eclipse, utilisez simplement Project -- > clean pour nettoyer le projet. Le R.java va être automatiquement (re) création.
Si pour quelque raison que dosn pas: assurez-vous votre mise en page.les fichiers xml ne contiennent pas d'erreurs. Eclipse semble être un peu buggé ici: parfois, il ne marque pas les erreurs dans le XML ni dans l'Explorateur de paquets. Dans un tel cas: regardez la "console" ou voir " problèmes "après avoir utilisé"nettoyer". Toutes les erreurs doivent être affichées. Corriger et refaire un propre.
NOTE: il N'est pas nécessaire de corriger les erreurs que vous obtenez à cause d'un fichier r manquant! il suffit de corriger les fichiers XML et les autres erreurs de projet et d'utiliser clean!
Quick fix:
le nom du paquet dans le manifeste doit être le même que celui dans le dossier /src
, le paquet de dossiers /gen
sera automatiquement reproduit.
observation détaillée:
observer le nom du paquet dans le dossier /gen
. Dans mon cas, c'était différent de celui du dossier /src
.
le colis mentionné dans le manifeste était celui du dossier /gen
.
j'ai essayé d'ajouter un paquet avec le nom du dossier /src
au dossier /gen
Voir Aussi ce qui se serait passé, mais cela n'a pas résolu le problème. J'ai procédé ensuite à supprimer le nom du paquet qui n'était pas le même que le nom du paquet du dossier /src
. Ce paquet avec le nom qui ne correspondait pas au dossier /src
a été recréé dès que je l'ai enlevé.
depuis la référence du paquet dans le manifeste correspondait à celle qui était recréée de façon insensée et qui ne correspondait pas avec le paquet dans le dossier /src
, ce qui a incité à renommer package = "oldPackage"
avec le package = "srcFolderPackage"
.
j'ai eu le même problème, et j'ai finalement trouvé le problème: Dans les cordes.xml, Je n'ai pas gardé 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 original.
Toutefois, le AndroidManifest.xml renvoie à cette valeur, donc:
= > une erreur de compilation;
= > le R.java n'est pas mis à jour;
=> ID ne sont pas reconnus...
Android a ajouté dans SDK construire L'outil ADT 22 pour le mécanisme de construction. Vous avez juste besoin de suivre les étapes suivantes.
- mise à jour de L'outil SDK Android
- mise à Jour Android SDK de la Plate-forme de l'Outil
- mise à jour de L'outil de construction SDK Android
- ajoutez le chemin de votre outil de compilation à la variable chemin. (chemin jusqu'à---- VOTRE CHEMIN RÉPERTOIRE\android-sdk\build-outils)
Ce sera résoudre le problème.
si votre R.java n'est pas généré, une des solutions est de supprimer le fichier de mise en page nommé "blabla.hors.XML."
après avoir supprimé ce fichier, essayer de nettoyer le projet à partir du menu projet - > nettoyer .
comme une généralisation de la réponse de Glaux, si vous avez n'importe quelle erreurs dans le répertoire res
, alors R.java peut ne pas générer - même si vous nettoyer et reconstruire. Résolvez ces erreurs en premier.
par exemple: lorsque vous ajoutez un fichier image de say," myimage-2.jpg", le système considérera cela comme une erreur, puisque les noms de fichiers sont limités à des valeurs alphanumériques. Faites une mise à jour sur votre répertoire 'res' après avoir ajouté des fichiers et regardez la sortie en votre fenêtre de console pour tout avertissement de nom de fichier.
si votre OS est Ubuntu, je peux fournir une suggestion:
-
installer ou mettre à niveau ia32-lib:
sudo apt-get upgrade ia32-libs
-
vérifiez si vous avez la bonne permission sur le dossier aapt:
cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2 chmod 777 aapt
-
Démarrer Eclipse:
sudo eclipse
-
l'Exécution du Projet -> Clean dans Eclipse
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 vérifier vos fichiers XML en premier!
il est toujours utile de jeter un oeil à L'onglet Problems dans Eclipse. Dans mon cas, je recevais un" android incapable de résoudre la cible 'android-8' " message d'erreur qui a gardé le R.java d'être généré. Ainsi, j'ai corrigé la cible importée à celle que j'utilisais dans le défaut .propriétés fichier, puis j'ai effectué un nettoyage via projets - > propre et voila! R.java est automatiquement généré! Espérons que cela aide!
projet de nettoyage, fermeture Eclipse, la réouverture et le lancement de mon projet a finalement fait mon R.java pour réapparaître... Espérons que cela aide
R.java ne sera jamais généré s'il y a des erreurs dans le dossier res
. Par exemple, dans le sous-dossier dessinable il y a deux fichiers qui ont le même nom, un est Icône.png, et l'autre est l'icône.HTML.
vous pouvez voir une erreur dans la fenêtre de log de la console Eclipse qui dit" L'icône entrée de la ressource est déjà définie.". Après la suppression de l'icône.html, vous pouvez nettoyer ou simplement supprimer le dossier gen
. Vous trouverez que R.java est créé.
j'ai trouvé que tout fichier qui a lettres majuscules dans le dossier res
va créer cette erreur. Cela m'est arrivé avec un fichier PNG que j'ai ajouté et oublié.
après avoir lu de nombreux billets et vidéos sur YouTube, j'ai découvert que chacun de nous avait R.java
disparu pour différentes raisons.
Voici comment j'ai corrigé ceci dans Eclipse:
- créer R.java dans
gen
dossier manuellement et enregistrer. - après cela, allez au projet et cliquez sur "Nettoyer"
le message suivant s'affichera et votre fichier sera être réécrit automatiquement:
R.java a été modifié manuellement! Retour à la version générée!
pour moi, j'avais relié V7 appcompat deux fois. Quoi qu'il en soit, dans Eclipse, faites un clic droit sur le nom du projet dans Package Explorer ou Navigator, allez dans Propriétés, Android, et décochez les doublons dans la section Bibliothèque. Vous devrez peut-être construire --> nettoyer après.
il n'y a évidemment pas de réponse définitive à cela, mais en voici une autre que je ne vois pas déjà ici:
j'ai eu R.java
disparaissent après (de tenter) d'une Équipe de la synchronisation, et il y avait de la résolution de conflits de fichiers dans le projet (c'est à dire, thingy.xml.mine
, thingy.xml.r35
, etc.). Les supprimer / résoudre les conflits régénérés R
.
j'ai eu ce problème. J'ai accidentellement supprimé ce
xmlns:tools="http://schemas.android.com/tools"
qui a commencé à causer des erreurs de compilation dans tout le projet dans Mes fichiers XML ainsi que mes fichiers Java. Dès que j'ai retapé ce que j'ai supprimé, il a travaillé à nouveau :)
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 êtes en train de configurer L'ADT pour la première fois, vous pourriez avoir ce problème là où R ne génère pas automatiquement. Vérifiez l'onglet 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: Android adb n'est pas trouvé
j'ai rencontré ce problème plusieurs fois. J'ai constaté que si je n'importais pas le paquet R par le nom de mon application, par exemple, si mon application avait l'exemple du nom du paquet.test puis j'ai trouvé que je devais importer exemple.test.R afin d'accéder à l'une des ressources.
si cela n'a pas été importé alors les ressources que là où obtenir retourné étaient les ressources par défaut avec aucun de mes propres inclus.
Avec cela dit, si vous trouvez que vous ne recevez qu'une liste de ressources par défaut, vérifiez simplement que vous importez application_package_name.R et pas androïde.R.
également s'assurer que vous avez la dernière version du plugin ADT, et ouvrir le gestionnaire SDK Android pour mettre à jour tous les outils SDK à la dernière version. Vérifiez les mises à jour dans Eclipse lui-même aussi. Les versions non assorties ont causé le problème pour moi.
mon problème était dans un fichier de menu.
Le compilateur ne semble pas vous avertir si des chaînes qui n'existent pas dans strings.xml
sont référencées dans les fichiers de menu. Vérifiez si vos item
dans votre menu font référence à des chaînes de caractères qui n'existent pas dans votre strings.xml
. Habituellement en android:title
.
pour moi, cette erreur a été causée lorsque j'ai essayé de dupliquer un res/menu
existant au lieu d'en créer un avec le wizard
.
toutes ces réponses ne peuvent pas fonctionner si vous utilisez Maven. La solution pour moi était d'ajouter
<genDirectory>${project.basedir}/gen</genDirectory>
dans la section configuration d'android-maven-plugin.
j'ai trouvé une solution pourquoi R.class N'est pas fait par Eclipse après l'avoir fait à nouveau - 2 nettoyer, construire, etc.
Le problème est ici, dans les chaînes.xml:
<string name="hello">Hello World, HelloAutoComplete!</string>
<string name="app_name">HelloAutoComplete</string>
ce sont par défaut créés par Eclipse lorsque vous créez des projets.
vous changez définitivement les cordes.xml pour vos propres besoins. Parfois, vous désactivez la chaîne.xmls ces deux lignes de votre code:
il pose un problème dans L'AndroidManifest.fichier xml:
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HelloAutoComplete" android:label="@string/app_name">
donc il ne peut pas communiquer avec les cordes.XML.
j'ai changé mon nom de fichier XML de layout et j'ai découvert plus tard que celui du fichier XML (widget provider dans ce cas) se réfère toujours à L'ancien XML de layout qui n'existe pas, et qui a empêché la génération automatique/correction de la classe r.