Android - как восстановить класс R?

Возможный дубликат:
Разработка для Android в Eclipse: R.java не генерирует

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

Как я могу отредактировать R-файл, чтобы он соответствовал требованиям моего проекта?


person zorglub76    schedule 11.01.2010    source источник


Ответы (26)


В другом вопросе о stackoverflow кто-то ответил на это: вы должен избавиться от предупреждений и ошибок (синтаксис и ссылки) в ваших файлах xml. Это плюс создание проекта чистой / сборки.

Проект -> Очистить и выберите вариант сборки проекта.

person Goufalite    schedule 22.01.2011
comment
ВНИМАНИЕ: чистка, скорее всего, УДАЛЯЕТ ВАШ КЛАСС R. Поскольку у вас есть ссылки на него по всему вашему коду, которые невозможно найти, они приведут к ошибкам. и поскольку вы не можете скомпилировать с ошибками, новый класс R не будет создан! - person omni; 05.11.2011
comment
Вы должны удалить класс R. Вам не нужно исправлять все ошибки, только ту, на которую ссылается R. Например. если забыть закрыть тег в макете с именем activity_page.xml (R.layout.activity_page), R не будет регенерировать. - person Muz; 30.08.2012
comment
если ничего не помогает, откройте консоль и запустите: ant instrument - person Steven; 02.03.2014

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

Решение

  • Убедитесь, что все, на что указывает R., не повреждено. Если он сломан, ADK может не сгенерировать R. Исправьте все ошибки в файлах XML.
  • Если вы каким-то образом столкнулись с чем-то и создали import android.R в своей деятельности, удалите это.
  • Запустите Проект - ›Очистить. Это удалит и регенерирует R и BuildConfig.
  • Убедитесь, что установлен флажок Проект - ›Создавать автоматически.
  • Подождите, пока ошибки не исчезнут.
  • Если не работает, удалите все в папке / gen /
  • Если это по-прежнему не работает, попробуйте щелкнуть правой кнопкой мыши свой проект - ›Инструменты Android -› Исправить свойства проекта.

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

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

  • Проверяйте ошибки внутри ваших XML-файлов, в основном в папке / res /
  • Обычными местами являются / layout / и / values ​​/, особенно если вы недавно изменили одно из них.
  • Проверьте AndroidManifest.xml, я обнаружил, что часто меняю строку и забываю изменить имя строки из AndroidManifest.xml.
  • Если вы не можете найти проблему. щелкните правой кнопкой мыши / gen / - ›Восстановить из локальной истории ... -› отметьте R.java - ›щелкните Восстановить. Это не решает проблему, но устраняет лишние ошибки, чтобы упростить поиск проблемы.

Я знаю, что здесь уже есть много ответов, но это первая ссылка в Google, поэтому я собираю здесь все советы и надеюсь, что это поможет кому-то еще новичку в этом :)

person Muz    schedule 30.08.2012
comment
Убедитесь, что все, на что ссылается R., не сломано. +100000 - person iTurki; 23.09.2012
comment
+1 за упоминание AndroidManifest.xml, я почти пропустил, чтобы проверить этот файл - person Aletheios; 29.11.2013
comment
В моем случае проблема заключалась в том, что Android Studio автоматически добавила после импорта import android.R в класс активности. Все ссылки из R были сломаны независимо от очистки и восстановления. После удаления строчки сборка снова заработала. - person georgik; 23.04.2019

Хорошо, исправил:

Когда я изменил манифест на целевую версию 1.5, появился миллион ошибок, и только одна не была связана с отсутствием класса R - в файле манифеста атрибутов "targetSdkVersion" и "maxSdkVersion" не было в sdk 1.5.

Из-за этого класс R не мог сгенерировать.

person zorglub76    schedule 11.01.2010
comment
Вероятно, вам следует отметить это решение как принятое. - person espinchi; 16.11.2010

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

  1. это ошибка, если один файл .xml ссылается на другой несуществующий и
  2. это ошибка, когда в именах файлов используются заглавные буквы (почему это запрещено, Я ОБОЖАЮ верблюжий регистр).

В любом случае, после переименования моих значков и файлов .xml на все строчные буквы и последующего исправления всех ссылок внутри файлов .xml, вуаля, R.java был регенерирован. Как раз вовремя, чтобы почувствовать себя хорошо, когда я остановился на обед :-)

person John Klippenstein    schedule 21.04.2010
comment
+1 за стильный ответ (люблю Just in time to feel good when I stopped for lunch :-)). Но, конечно же, R.java вызывает подобные проблемы прямо сейчас! - person nemesisfixx; 14.01.2012
comment
спасибо за полезное предложение @John - person Frank Myat Thu; 03.03.2013
comment
Изображения с прописными буквами тоже вызывают эту ошибку - person gkiko; 18.03.2013

Чтобы снова сгенерировать файл R:

  1. Измените что-нибудь в layout-> activity_main.xml
  2. Сохраните файл
  3. Проект-> Очистить ...

Просто удалите R-файл, расположенный в каталоге gen, а затем попробуйте Project-> Clean. Затем снова создайте свое приложение.

person Muhannad A.Alhariri    schedule 13.03.2012

Вы также можете щелкнуть правой кнопкой мыши project -> Android Tools -> Fix Project Properties. Это должно привести к повторной генерации класса R.java.

person Erich Douglass    schedule 11.01.2010
comment
Нет, это не работает. - person IgorGanapolsky; 01.12.2011

Я снова открываю eclipse, редактирую один из моих xml-файлов, а затем обнаруживаю, что мой класс активности ссылался на android.R вместо моего пакета «R» :-)

person Charles    schedule 31.12.2011
comment
+1. Я просто выбираю первое быстрое исправление, которое вижу в Eclipse, и двигаюсь дальше. Этот подлый. - person Ben Mosher; 20.01.2012

Моя проблема была в файле Манифест. Я удалил значки лаунчера и не упомянул новые на Манифесте :)

person InsaurraldeAP    schedule 04.12.2011
comment
У меня была та же проблема, в файле манифеста была ошибка, из-за которой все не продолжалось. - person Daniel Imms; 02.05.2012

Чтобы регенерировать R.class, вам придется попробовать несколько техник.

  • Удалите любой импорт R из исходных файлов Java: import R.android
  • Обязательно откройте панель «Проблемы», выбрав Окно-> Показать вид-> Проблемы.
  • Если у вас есть ошибки в ваших xml-ресурсах, вам необходимо исправить эти ошибки. В моем случае мне пришлось изменить свои атрибуты id, чтобы включить знак «+» следующим образом: android:id="@+id/grp_txt"
  • Теперь перейдите к Project-> Clean
  • Наконец, сделайте Project-> Close, Project-> Open

Знак «+» указывает новый идентификатор ресурса и заставляет инструмент aapt создавать новое целое число ресурса в классе R.java.

person Temperage    schedule 15.03.2012
comment
На дворе 2018 почти 2019 год, и ваш комментарий только что закончился 3-дневной работой, пытаясь понять, в чем проблема. - person hamada147; 22.10.2018

Если вы используете Intellij IDEA, вы можете нажать Build - Rebuild Project

person Georgy Gobozov    schedule 18.08.2010

Если вы случайно удалили свой R в eclipse с помощью команды «очистить проект» (не делайте этого) Щелкните правой кнопкой мыши свой файл проекта -> Восстановить из локальной истории ...

воссоздайте свой R

Мое дело:

  • Сломанный xml вызывал ошибку в R. (из-за букв ä, ö, ü в id)
  • чистый проект удалил мой R.

Что я сделал:

  • воссозданный R из местной истории
  • проверил неправильный импорт R в моих классах (например, import android.R) и удалил их
  • исправил этот xml-файл и сохранил его содержимое во внешнем txt-файле
  • полностью удалил xml из моего проекта.
  • один раз запустил мой проект
  • верните этот фиксированный xml на место

и...

  • обнял мою девушку без причины после того, как взбесился, как Халк.
person Corona    schedule 19.08.2012
comment
Я в похожей лодке - я унаследовал большую кодовую базу, которая уже представляла собой комбинацию двух довольно больших проектов и десятков файлов / res. Резервное копирование xml-файлов вне Eclipse, повторная сборка проекта и последующее добавление xml-файлов по одному - все это помогло. Жаль, что у меня не было девушки, чтобы обнять: s - person CCJ; 16.01.2013

Моя проблема заключалась в ошибках в моих файлах XML. Ошибки не всегда автоматически обнаруживаются в Android Common XML Editor или Android Common Manifest Editor, поэтому попробуйте вместо этого использовать обычный текстовый редактор. Например, в мои файлы manifest и strings.xml каким-то образом была вставлена ​​какая-то случайная тарабарщина из файла .java.

Щелкните правой кнопкой мыши любой файл XML (скорее всего, в папке / res или в AndroidManifest.xml) и нажмите «Открыть с помощью», затем выберите «Текстовый редактор». Убедитесь, что все в порядке, а затем сохраните. Кроме того, не забудьте включить для вашего проекта «Автоматическая сборка». Я удалил свой файл R.java, и он был восстановлен с нуля, поэтому нет необходимости восстанавливать его из локальной истории.

person jgonagle    schedule 17.10.2012

Попробуйте добавить новый «Android XML-файл», например, в папку /res/layout. Это может заставить плагин регенерировать класс R.

person Richard Szalay    schedule 11.01.2010
comment
Пробовал, но ничего не произошло (я даже перезапустил Eclipse перед добавлением xml-файла) - person zorglub76; 11.01.2010
comment
Добавил test.xml в папку макета, но ничего не вышло. - person IgorGanapolsky; 01.12.2011

Вы можете просто изменить любые XML-файлы в папке / res и даже просто добавить место и сохранить, он будет восстановлен.

person Cytown    schedule 11.01.2010
comment
Раньше так делал, а теперь не работает ... Все еще нет класса R .. - person zorglub76; 11.01.2010

У меня была такая же проблема - отсутствовала буква "R". И ни один из приведенных здесь советов не помог. К счастью, я нашел причину - как-то Eclipse потерял цель Project-Properties. Это было тревожно. До сих пор я не знаю, что с этим произошло, но установка обратно помогла. Итак, внимание - отсутствие R может означать и отсутствие цели!

person Gangnus    schedule 05.05.2011

Я испробовал все вышеперечисленные решения. Но, к сожалению, мою проблему это не решило. Мой R.java исчез, как только я вставил новое изображение в свою папку с возможностью рисования. Прочитав ответы на этот вопрос, я попытался удалить значок, который я вставил ранее (при автоматическом включении сборки), и после этого все было в порядке. Надеюсь, это кому-то поможет!

person Alanagh    schedule 06.05.2011

У меня была эта проблема, и я просто щелкнул правой кнопкой мыши пакет своего проекта и Build Project. Мгновенно класс R появился в пакете gen.

person AlexisM    schedule 02.09.2011

Если кто-то еще найдет эту ветку при поиске в Google, как это сделал я:

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

import android.R;

Это эффективно скрывает материал проекта R. Просто удалите и снова все будет хорошо ...

person Jonas    schedule 07.09.2011
comment
добавление этого вызовет сбой в работе вашей программы, если класс R импортируется непосредственно в любом месте с помощью eclipse, это состояние импорта должно быть удалено, т.е. import android.R или my_project.R (иногда eclipse делает это автоматически) - person tjb; 08.10.2011
comment
Йонас прав. По его словам, строку импорта следует убрать. - person Brian Kyckelhahn; 22.03.2012

Вы можете использовать Eclipse «Восстановить из локальной истории», чтобы восстановить старый R-файл, если он был удален. После этого вы, возможно, увидите, что мешает Eclipse создавать ваши файлы (я видел другие ошибки, чем раньше, которые действительно помогли решить проблему).

person user1201626    schedule 13.02.2012

Возможно, вы можете перейти в свойства проекта и выбрать вариант Android, а затем определить цель для проекта. После того, как вы примените выбранный целевой API для этого проекта, он автоматически сгенерирует R.java.

person subnesh    schedule 20.02.2012

В основном проблема с неверным файлом макета. Откройте представление «Проблемы» и найдите ошибки в файлах макета XML. Исправьте их, и класс R будет воссоздан.

В моем случае реальной ошибки не было. Представление проблемы показало ошибку в макете xml. Редактор тоже показал ошибку xml. Просто переформатировав xml с помощью автоматического форматирования с помощью 'ctrl-f', исправлена ​​'ошибка' xml, и класс R был воссоздан.

person schwarz    schedule 20.02.2012

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

person Steve    schedule 11.01.2010
comment
Извините, я неправильно прочитал! - person Steve; 11.01.2010
comment
Это просто не так, по крайней мере, на моей машине. - person IgorGanapolsky; 01.12.2011
comment
Этот вопрос был задан, когда Android был в версии 1.6, возможно, с тех пор изменился! Но затмение использовалось для автоматического создания файла. - person Steve; 02.12.2011

Для меня это был ресурс со строковым значением, который не был определен… после того, как я вручную добавил его в Strings.xml, класс R был автоматически регенерирован!

person richey    schedule 12.05.2012

Эта проблема обычно возникает при импорте из существующего проекта. Попробуйте исправить все ошибки во всех файлах .xml в папке res, а также в файле манифеста. Скорее всего, ошибки отображаются в параметре «match_parent», измените его на «fill_parent». Когда все ошибки будут устранены, появится R.java.

Если в каком-либо файле .xml нет ошибки. Попробуйте отредактировать любой XML-файл (например, удалить букву и ввести ее обратно), а затем сохранить файл, это приведет к созданию файла R.java.

person laph    schedule 29.07.2012

У меня проблема с тем, что findViewById(R.id.edit_text), но возвращает TextView, а не EditText. Я думаю, что проблема в том, что класс R.id имеет неправильный номер идентификатора, тогда я очищаю проект, и он работает нормально.

person Simon    schedule 06.09.2012

В моем случае это был XML-файл с неправильным именем, из-за которого мой R-файл не перестраивался. Это не отображалось в проводнике пакетов, но было показано в LogCat. Обратите внимание на любые предупреждения о ваших файлах res. Независимо от того, сколько раз вы очищали свой проект, файл R не будет перестраиваться, пока эти ошибки не будут устранены.

person davemeyer    schedule 09.04.2012