Android: Что такое R? Почему это так загадочно?


Я пытался дублировать проект образца Блокнота таким образом, что если я буду возиться с исходными файлами, чтобы учиться через эксперименты, исходные файлы образцов не будут затронуты.

Увы, несмотря на следующее очень чистый шаги в первозданной среде,R обратился против меня, снова!

Я получил около 20 "R не может быть решен переменной" ошибки...

теперь это похоже Уловка 22: я пытаюсь изучить образец Блокнота, чтобы у меня был шанс понять, что такое R. Но R не любит меня так сильно, поэтому это не дает мне возможности изучить образец Блокнота.

чтобы добавить оскорбление к ушибу, когда я Google для R, Я получаю совершенно нерелевантные результаты.

  1. что это R?
  2. почему это так загадочно?
  3. почему это всегда первый, что не может быть решили?

обновление: я заметил, что в проекте HelloAndroid (версия XML макета), есть созданный Java файл с именем R.java. Это печально известный R о том, что застройщиком проекта является жалуется?

3 67

3 ответа:

R - Это класс, содержащий определения для всех ресурсов конкретного пакета прикладных программ. Он находится в пространство имен пакета прикладных программ.

например, если вы говорите в манифесте ваше имя пакета com.foo.bar, an R класс генерируется с символами всех ваших ресурсов в com.foo.bar.R.

вообще дваR занятия вы будете иметь дело с

  1. в ресурсы фреймворка в android.R и
  2. в пространстве имен

это называется R потому что это означает Resources, и нет смысла заставлять людей печатать что-то дольше, тем более, что обычно в конечном итоге после него появляются довольно длинные имена символов, что может вызвать изрядное количество обертки линии.

Что такое R: Нет ничего очень таинственного в R. Это просто класс, который имеет много статических подклассов, откройте его в eclipse и посмотрите (его под gen/).

каждый член этого класса является одним из двух: 1) статические конечные классы или 2) статические конечные целые числа, которые уникальны по отношению к другим членам своего класса.

почему это так загадочно: Его легко запутать, потому что R автоматически генерируется муравьем. Это загадочно, потому что вы не должны "касаться" его вручную (конечно, вы можете, но ваши изменения будут автоматически удалены при регенерации). Его дополнительно загадочно, потому что иногда eclipse автоматически импортирует стандартный файл R андроидов (как описано в ответах выше)

почему это всегда первый, который не может быть решен: R точно следует правилам классов и пакетов Java, есть ничего особенного о том, как R действует с уважение к импорту. R будет автоматически помещен в пакет, указанный в записи пакета в файле манифеста

<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" />

чтобы узнать, к какому пакету принадлежит ваш файл R, просто откройте папку gen/ в eclipse (packages view). Вы увидите один пакет, указанный там, он будет иметь имя, указанное в манифесте. Попробуйте удалить его, он вернется, если все ваши ресурсы следуют правильным правилам именования и все ваши xml-файлы следуют правильным правилам xml, и если автоматически построить включен в eclipse.

ключ к пониманию файла R заключается в том, чтобы понять, что он находится в том же пакете, что и другие классы, даже если он находится в другом каталоге, а затем другие файлы, принадлежащие вашему "основному" пакету. После того, как вы поймете это и поймете синтаксис и именование файлов ресурсов устранение проблем с R легко.

R-имя для ваших ресурсов. Любой ресурс, к которому вы получаете доступ, вы получаете доступ по R.$FOLDER.$RESOURCE или что-то очень похожее. Если он не может быть разрешен, убедитесь, что путь правильный и ссылочный ресурс существует(с учетом регистра; включить расширение). Кроме того, запутанная часть(для меня в любом случае) заключается в том, что есть два разных R ' s. если вы получаете много ошибок "не может быть решена", попробуйте посмотреть, что вы импортируете. Попробуйте изменить или удалить его. Или вы можете попробовать чистку ваш проект(предупреждение: Иногда это делает вещи хуже, чем они уже есть).