Разработка для Android в Eclipse: R.java не регенерирует - PullRequest
307 голосов
/ 03 мая 2010

Я обнаружил, что мой R.java никогда не обновляется, поэтому он не содержит информации о моих новых ресурсах, поэтому я решил удалить его и подумал, что Eclipse создаст новый. Но этого не произошло, и у меня нет R.java сейчас. Как я могу восстановить один?

Я использую Windows 7.

Из одного из комментариев: «Выполнение Проекта -> Очистка - вот что вызвало проблему для меня. Очистка удаляет R.java ... и по любой причине плагин не восстанавливать файл. "

Ответы [ 64 ]

302 голосов
/ 02 апреля 2013

Я обнаружил, что это происходит со мной с разбитым макетом, и все взрывается. Расслабьтесь, это похоже на ту старую ошибку, когда вы впервые изучили программирование на C, когда вы забыли одну точку с запятой, и она генерирует сотню ошибок. Многие паникуют, нажимают на все кнопки и усугубляют ситуацию.

Решение

  • Убедитесь, что все ссылки на R. не повреждены. Исправьте все ошибки в ваших XML-файлах . Если что-то в ADK сломано, R не будет регенерироваться.
  • Если вы как-то ударили по чему-то и создали import android.R в своей деятельности, удалите его .
  • Выполнить Проект -> Очистить . Это удалит и восстановит R и BuildConfig.
  • Убедитесь, что Проект -> Автоматическая сборка отмечен. Если нет, создайте его вручную с помощью Menu -> Project -> Build Project.
  • Подождите несколько секунд до исчезновения ошибок.
  • Если это не работает, удалите все в папке / gen /
  • Если это все еще не работает, попробуйте , щелкнув правой кнопкой мыши ваш проект -> Инструменты Android -> Исправить свойства проекта .
  • Проверьте файлы *. Properties (в корневой папке папки вашего приложения) и убедитесь, что ссылки там не повреждены.
  • Щелкните правой кнопкой мыши свой проект> свойства> Android . Посмотрите на разделы «Назначение проекта» и «Библиотека» в правой части страницы. Ваша цель сборки должна соответствовать цели в вашем AndroidManifest.xml. Поэтому, если в AndroidManifest установлено целевое значение 17, убедитесь, что в качестве целевого имени используется Android 4.2. Если в вашей Библиотеке есть X под ссылкой, удалите и повторно добавьте библиотеку, пока не появится зеленая галочка. Это может произойти, если вы переместили несколько файлов и папок.

Что делать, если R не восстанавливается

Обычно это происходит, когда у вас поврежденный XML-файл.

  • Проверять ошибки внутри ваших XML-файлов, в основном в папке /res/
  • Обычные места: /layout/ и /values/, особенно если вы недавно изменили одну из них
  • Проверка AndroidManifest.xml. Я нахожу, что часто я изменяю строку и забываю изменить имя строки с AndroidManifest.xml.
  • Убедитесь, что Android SDK Build-tools установлено. Окно -> Android SDK Manager -> Инструменты -> Android SDK Build-tools
  • Убедитесь, что при обновлении Android SDK Tools вы также обновляете Android SDK Platform-tools и Android ADK Build-tools. Сборка завершается неудачно, если они не совпадают.
  • Если вы не можете найти проблему, щелкните правой кнопкой мыши / gen / -> Восстановить из локальной истории ... -> отметьте R.java -> нажмите Восстановить . Даже если это не решит проблему, оно удалит дополнительные ошибки, чтобы упростить поиск проблемы.
176 голосов
/ 03 мая 2010

Этот сайт предлагает:

если вы запустите очистку проекта, он должен восстановить все созданные Java-файлы, а именно R.

... и ...

В Eclipse, под меню Project, есть опция build автоматически. Это поможет вам создать файл R.java каждый раз, когда изменения сделал. Параметр «Очистить ...» также есть в разделе «Проект».

Этот сайт предлагает другое решение.

40 голосов
/ 13 мая 2011

У меня была такая же проблема. Когда я проверил это, я обнаружил, что имя XML-ресурса в макете не имеет правильного соглашения об именах. У него были заглавные буквы. Поэтому я переименовал его, чтобы все буквы были строчными, и магия сработала.

28 голосов
/ 18 ноября 2010

Одна из причин, по которой R.class может внезапно пропасть, - ошибки в ваших XML-файлах. Например, когда вы добавляете XML-файл с заглавными буквами в имени, например, myCoolLayout.xml, который не допускается. Или если у вас есть ссылки, которые не указывают на существующие файлы и т. Д.

17 голосов
/ 04 января 2012

В Eclipse просто используйте Project -> clean для очистки проекта. R.java будет создан автоматически (пере).

Если по какой-то причине это не работает: Убедитесь, что в файлах layout.xml нет ошибок. Eclipse, кажется, здесь немного глючит: иногда он не помечает ошибки в XML или в проводнике пакетов. В таком случае: посмотрите на «консоль» или «проблемы» после использования «clean». Все ошибки должны отображаться там. Исправьте их и переделайте чистую.

ПРИМЕЧАНИЕ: НЕ обязательно исправлять ошибки, которые вы получаете из-за отсутствующего файла R! Просто исправьте файлы XML и другие ошибки проекта и используйте clean!

10 голосов
/ 29 июля 2011

Быстрое исправление:

Имя пакета в манифесте должно совпадать с именем в папке /src, пакет папки /gen будет автоматически воспроизведен.

Детальное наблюдение:

Обратите внимание на имя пакета в папке /gen. В моем случае это было не то, что в папке /src.

Пакет, указанный в манифесте, был пакетом папки /gen.

Я попытался добавить пакет с именем папки /src в папку /gen, чтобы посмотреть, что случилось бы, но это не решило проблему. Затем я продолжил удалять имя пакета, которое не совпадало с именем пакета в папке /src. Этот пакет с именем, не соответствующим папке /src, был воссоздан, как только я его удалил.

Поскольку ссылка на пакет в манифесте соответствует бессмысленно воссозданному и не соответствует пакету в папке /src, это привело к переименованию package = "oldPackage" с помощью package = "srcFolderPackage".

9 голосов
/ 22 июня 2013

Android добавил в SDK инструмент для сборки ADT 22 для механизма сборки. Вам просто нужно сделать следующие шаги.

  1. Обновление Android SDK Tool
  2. Обновление Android SDK Platform Tool
  3. Обновление Android SDK Build Tool
  4. Добавьте путь вашего инструмента сборки к переменной пути. (путь до ---- ВАША КАТАЛОГ-Путь \ android-sdk \ build-tools)

Это решит проблему.

9 голосов
/ 04 декабря 2010

У меня была та же проблема, и я наконец нашел проблему: в strings.xml я не сохранил строку <string name="app_name">program-name</string>, которая присутствует по умолчанию при создании нового проекта Android. Я думал, что он был использован только для программы HelloWord, которая является оригинальной программой.

Однако AndroidManifest.xml ссылается на это значение, поэтому:

=> Ошибка компиляции;
=> R.java не обновляется;
=> ID не распознан ...

8 голосов
/ 04 января 2011

Если ваш R.java не генерируется, одним из решений является удаление файла макета с именем «blabla.out.xml».

После удаления этого файла попробуйте очистить проект из меню Проект -> Очистить .

7 голосов
/ 30 августа 2011

В качестве обобщения ответа Glaux, если у вас есть любые ошибки в каталоге res, R.java может не генерировать - даже если вы очистите и перестроите. Устраните эти ошибки в первую очередь.

В качестве примера: при добавлении файла изображения, скажем, «myimage-2.jpg», система сочтет это ошибкой, поскольку имена файлов ограничены буквенно-цифровыми значениями. После добавления любых файлов обновите каталог 'res' и просмотрите вывод в окне консоли на наличие предупреждений об именах файлов.

...