Android: Что такое R? Почему это так Cryptic?

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

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

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

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

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

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

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

Solutions Collecting From Web of "Android: Что такое R? Почему это так Cryptic?"

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

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

Обычно есть два класса R которыми вы будете иметь дело.

  1. Рамочные ресурсы в android.R и
  2. Ваш собственный в вашем пространстве имен

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

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

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

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

Почему это всегда первый, который не может быть разрешен: 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 / folder в eclipse (представление пакетов). Вы увидите один пакет, указанный там, он будет иметь имя, указанное вами в манифесте. Попытайтесь удалить его, он вернется, если все ваши ресурсы следуют правильным правилам именования, и все ваши xml-файлы следуют правильным правилам xml, и если сборка автоматически включена в eclipse.

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

R – это имя для ваших ресурсов. Любой ресурс, к которому вы R.$FOLDER.$RESOURCE к вам через R.$FOLDER.$RESOURCE или что-то очень похожее. Если он не может быть разрешен, убедитесь, что путь правильный, и ресурс, на который существует ссылка (с учетом регистра, включает расширение). Кроме того, запутанная часть (для меня в любом случае) заключается в том, что существуют два разных R Если вы получаете много ошибок «Не удалось решить», попробуйте увидеть, что вы импортируете. Попробуйте изменить или удалить его. Или вы можете попробовать очистить свой проект (ПРЕДУПРЕЖДЕНИЕ: Иногда это делает вещи хуже, чем они есть).