101 votes

Android: Qu'est-ce que R? Pourquoi est-ce si cryptique?

J'ai essayé de dupliquer le bloc-notes exemple de projet tels que si je bricole avec les fichiers source dans le but d'apprendre par l'expérimentation, l'échantillon original, les fichiers ne seront pas affectés.

Hélas, en dépit de très propre étapes dans un environnement vierge, la R s'est retourné contre moi, de nouveau!

J'ai obtenu environ 20 "R ne peut pas être résolu à une variable" erreurs...

Maintenant, c'est comme le catch 22: je suis en train d'étudier le bloc-notes de l'échantillon, de sorte que j'ai une chance de comprendre ce que R est. Mais la R ne m'aime pas tellement, donc il ne veut pas me donner une chance d'étudier le bloc-notes de l'échantillon.

Pour ajouter l'insulte à l'injure, quand je Google pour R,- je obtenir totalement dénuée de pertinence des résultats.

  1. Qu'est-ce que R?
  2. Pourquoi est-il si Énigmatique?
  3. Pourquoi c'est toujours la première qui ne peut pas être résolu?

Mise à jour: j'ai remarqué que dans le HelloAndroid projet (XML version mise), il est généré un fichier Java, nommé R.java. Est-ce l'infâme R sur lequel le générateur de projet est de se plaindre?

129voto

hackbod Points 55292

R est une classe contenant les définitions de toutes les ressources d'un package d'application. C'est dans l'espace de noms de l'ensemble de la demande -- c'est si vous dites dans votre manifeste, votre nom de paquet est "com.foo.bar", une classe R est généré avec les symboles de toutes vos ressources dans com.foo.bar.R.

Il y a généralement deux R classes de vous -- le cadre des ressources en android.R et de votre propre dans votre espace de noms.

Il est nommé R parce que c'est synonyme de Ressources et il n'y a pas de point d'en faire des personnes de type de quelque chose de plus, surtout depuis qu'il est fréquent de se retrouver avec assez longue noms de symbole après ce qui peut provoquer une bonne quantité de la ligne d'emballage.

23voto

tjb Points 2869

Qu'est-ce que R: Il n'y a rien de très mystérieux R. C'est juste une classe qui a de nombreuses sous-classes statiques, ouvrir eclipse et de prendre un coup d'oeil (ses sous gen/).

Chaque membre de cette classe est l'une des deux choses: 1) static final classes ou 2) static final entiers qui sont uniques à l'égard des autres membres de leur classe.

Pourquoi est-il si cryptique: Il est facile de se confondre car R est généré automatiquement par ant. Son énigmatique parce que vous n'êtes pas censé le "toucher" manuellement (vous pouvez bien sûr mais vos modifications seront automatiquement effacées lors de la régénération). Son de plus cryptique parce que parfois eclipse importe automatiquement les androïdes standard R fichier (comme indiqué dans les réponses ci-dessus)

Pourquoi c'est toujours la première qui ne peut pas être résolu: R suit les règles de classes Java et des ensembles, il n'y a rien de spécial à propos de comment R les actes à l'égard de l'importation. R sera automatiquement placé dans le package spécifié par l'entrée de colis dans votre fichier manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="package.which.will.contain.R.and.probably.the.main.package.in.the.application" android:versionName="8.6.2011" android:versionCode="1">
    <uses-sdk android:minSdkVersion="13" />

Pour voir ce package de votre R fichier appartient qu'à ouvrir la gen/ dossier dans eclipse (packages). Vous verrez un paquet qui y sont énumérés, il aura le nom que vous avez spécifié dans votre manifeste. Essayer de le supprimer, il va revenir si l'ensemble de vos ressources de respecter le règles de nommage et de tous vos fichiers xml de suivre la bonne xml règles et si génération automatique est activée dans eclipse.

La clé de la compréhension de la R fichier est de réaliser que c'est dans le même package que les autres classes, même si elle est dans un répertoire différent de d'autres fichiers appartenant à votre "main". Après vous comprenez cela et comprendre la syntaxe et de nommage des fichiers de ressources de résolution des problèmes avec les R, c'est facile.

4voto

John Points 2518

R est le nom de vos ressources. Toute ressource que vous avez accès vous pouvez accéder en R.$FOLDER.$RESOURCE ou quelque chose de très similaire. Si il ne peut pas être résolu, assurez-vous que le chemin d'accès est correct et de la ressource référencée existe(sensible à la casse; inclure l'extension). Aussi, la confusion de la partie(pour moi en tout cas) c'est qu' il existe deux sortes d' R'. Si vous obtenez beaucoup de "Ne peut pas être résolu" des erreurs, essayez de voir ce que vous importez. Essayez de modifier ou de la retirer. Ou vous pouvez essayer le nettoyage de votre projet(AVERTISSEMENT: Parfois, cela rend les choses pires qu'elles ne le sont déjà).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X