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

309

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

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

Из одного из комментариев: «Doing Project -> Clean - это то, что вызвало проблему для меня. Очистка удаляет R.java ... и по какой-либо причине плагин не восстанавливает файл».

Peter Mortensen
источник
мое решение при очистке не работало: мне нужно было загрузить Build Tools в SDK manager, а затем перезагрузить систему. У меня ADT 22.3.0.
Мораднеяд

Ответы:

177

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

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

...и...

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

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

aioobe
источник
1
Кто бы мог подумать, спасибо, ребята +1, здесь у меня была проблема с моим макетом, и поэтому R.Java не создавался. Великолепно! Приветствия.
101
Doing Project-> Clean - вот что вызвало проблему для меня. Очистка удаляет R.java ... и по какой-либо причине плагин не восстанавливает файл.
Церин
7
У меня было это всплывающее окно, когда я связывался с библиотекой, для которой требовалась версия API поддержки Android, отличная от установленной. Зависимости не работали, и мой R не генерировался после этого. Как уже говорили другие, это отображается в журнале ошибок, так что проверьте там.
Майкбабкок
1
В моем случае очистка проекта просто удаляет R.java , а не восстанавливает его. stackoverflow.com/questions/13065425/…
RobinJ
96
R.java не регенерирует, если у вас есть ошибки в каталоге res. Удалены ошибки -> решена проблема в моем случае :)
JavaRunner
300

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

Решение

  • Удостоверьтесь, что все R.ссылки на не повреждены. Исправьте все ошибки в ваших файлах XML . Если что-то в ADK сломано, Rне будет регенерировать.
  • Если вы как-то ударили и создали что-то import android.Rв своей деятельности, удалите это .
  • Запустить проект -> Очистить . Это удалит и восстановит R и BuildConfig.
  • Убедитесь, что Project -> Build Auto галочки отмечены. Если нет, создайте его вручную с помощью 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 -> нажмите Восстановить . Даже если это не решит проблему, она устранит дополнительные ошибки, чтобы облегчить поиск проблемы.
Муз
источник
21
это должен быть главный ответ!
john.k.doe
6
Действительно, это заставило меня понять, что моя среда все еще нуждается в обновлении инструментов.
woodleg.as
11
Window-> Android SDK Manager-> Инструменты-> Android SDK Build-tools это решение для меня, проголосовало
1
Я прочитал десятки ответов, и только этот упомянул о проверке SDK Build-tools. Я слепо позволил eclipse загрузить и установить все свои инструменты Android, когда это было предложено. Это полностью пропустил ту часть.
Джастин Аквадро
1
Проверьте консоль, может дать вам подробную ошибку, которую необходимо исправить, а затем вы можете построить. Это помогло в моем случае
david72
40

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

Амит Кумар
источник
2
TNX ... глупо, я думаю, что я мог бы использовать верхний регистр в именах моих макетов
Кевин
у меня тоже сработало: консоль сообщила об этом: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Неверное имя файла: должно содержать только [a-z0-9_.]
Сами
1
Спасибо, это была моя проблема. У меня был файл .xml в папке макета с заглавной буквой, и весь мой файл R.java отсутствовал / не будет генерироваться из-за этого. Единственный способ узнать это - это осознать, что соглашение об именах не допускает капитала; ошибок не было.
Lemmings19
1
При именовании файлов ресурсов или атрибутов, попробуйте назвать его так, как вы называете переменную в Java. R.class помещает ресурсы, т. е. id, drawable, имена файлов xml с общедоступной статической конечной константой, поэтому значение "-", "спецсимвол" приведет к прекращению генерации R, поскольку эти символы могут иметь другие арифметические средства.
IronBlossom
1
Да, это была проблема для меня. Файл в моем файле res / xml ссылается на несуществующий файл макета, и, очевидно, это приводит к тому, что R.java не генерируется, поэтому, если я запускаю Clean, это приводит к отсутствию R.java, что приводит к сотням ошибок импорта ...
Церин
28

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

Pawel
источник
17

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

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

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

masi
источник
Убедитесь, что ваши соглашения об именах файлов ресурсов верны. @Masi спасибо за подсказку о поиске ошибок в консоли после очистки. это помогло мне.
Бхарат Бушан
10

Быстрая починка:

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

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

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

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

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

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

androidWorkerTheEighth
источник
9

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

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

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

Glaux
источник
строка в string.xml - это "<string name =" имя_приложения "> имя программы </ string>". Извините, у меня была проблема с моим постом.
Glaux
9

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

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

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

Amol
источник
Мой ответ единственный, который относится к вопросу. все еще получил только 3 голоса. странный!
Mr.India
8

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

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

Шашанк
источник
7

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

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

Авель
источник
Именно! Это случается со мной время от времени, когда я переименовываю строки в моем strings.xml. Это может создать висящие ссылки в моих файлах макета. И это тормозит производство R.java. Жаль, что нет способа реорганизовать XML-идентификаторы.
Скотт Биггс
6

Если ваша ОС - Ubuntu, я могу предложить следующее:

  1. Установите или обновите ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Проверьте, есть ли у вас права доступа к папке aapt:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  3. Запустите Eclipse:

    sudo eclipse
  4. Запустить проект -> Очистить в Eclipse

Невин Чен
источник
превосходно. а также это делает работу ADB. Просто напомните мне, что я должен установить это при переустановке Ubuntu.
Yeung
то же самое решение верно для Debian amd64
Маркус Перобнер
Этот ответ stackoverflow.com/questions/19523502/… предоставляет более свежие инструкции, ia32-libs не было в Elementary
Singagirl
6

У вас на 100% есть ошибка в XML-файле , но проверка XML не показывает вам ошибку. Это причина, почему вы должны проверить ваши файлы XML в первую очередь!

Erdinc Ay
источник
5

ВСЕГДА полезно взглянуть на вкладку « Проблемы» в Eclipse. В моем случае я получал сообщение об ошибке « Android не удалось разрешить цель« android-8 » », которое не позволяло сгенерировать R.java. Итак, я исправил импортированную цель на ту, которую использовал в файле default.properties , а затем выполнил очистку через Projects-> Clean и вуаля! R.java генерируется автоматически! Надеюсь, поможет!

goseib
источник
Спасибо за указание на вкладку проблем. Я новичок в Android и затмении, поэтому не использовал его раньше и становился раздраженным. Это первое место, чтобы посмотреть при возникновении этой ошибки.
Маадиньш
4

Очистка проекта, закрытие Eclipse, повторное его открытие и запуск моего проекта, наконец, заставили моего R.java появиться снова ... Надеюсь, это поможет

Филиппо Мазза
источник
Я также должен был перезагрузиться, Eclipse жаловался на отсутствие aapt, но он присутствовал ....
Филиппо Мазза
4

Убедитесь, что вы не импортируете

android.R;

Заин Али
источник
4

R.java никогда не будет сгенерирован, если в res папке . Например, в подпапке drawable есть два файла с одинаковыми именами, один - icon.png, а другой - icon.html.

Вы можете увидеть некоторую ошибку в окне журнала консоли Eclipse, которая говорит: «Значок входа в ресурс уже определен». После удаления icon.html вы можете очистить или просто удалить genпапку. Вы обнаружите, что R.java создан.

Peter Mortensen
источник
4

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

Peter Mortensen
источник
3

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

Вот как я это исправил в Eclipse:

  • Создайте R.java в genпапке вручную и сохраните.
  • После этого зайдите в Project и нажмите «Очистить»

Появится следующее сообщение, и ваш файл будет автоматически переписан:

R.java был изменен вручную! Возвращаясь к сгенерированной версии!

Anup Singh
источник
1
Anup .. Я сделал это /// Но быть удаленным, когда я очистил это ... Проблема все еще не решена для меня!
ejjyrex
3

Для меня я связал v7 appcompat дважды. В любом случае, в Eclipse, щелкните правой кнопкой мыши имя проекта в Package Explorer или Navigator, перейдите в Properties, Android и снимите отметки с любых дубликатов в разделе Library. Возможно, вам понадобится Build -> Clean впоследствии.

Шенкер Каура
источник
2

Очевидно, что нет окончательного ответа на этот вопрос, но вот еще один, который я здесь уже не вижу:

У меня была R.javaисчезнуть после (попытки) в сборную команду Синхронизировать, и там были файлы разрешения конфликтов в проекте (т.е. thingy.xml.mine, thingy.xml.r35и т.д.). Удаление их / разрешение конфликтных ситуаций R.

Бен Мошер
источник
2

У меня была эта проблема. Я случайно удалил это

xmlns:tools="http://schemas.android.com/tools"

что стало причиной ошибок сборки во всем проекте в моих XML-файлах, а также в моих Java-файлах. Как только я набрал то, что я удалил, это снова заработало :)

Mohamed El-Saka
источник
2

Итак, ясно, что для этой проблемы может быть много причин. Если вы работаете на 64-битной Linux-машине и впервые настраиваете ADT, вы можете столкнуться с этой проблемой, когда R не генерируется автоматически. Проверьте вкладку консоли, и вы можете увидеть ошибку, похожую на:

 'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'

Если это так, вам нужно установить ia32-libs, используя что-то вроде:

 sudo apt-get install ia32-libs

Подробности здесь: Android adb не найден

Патрик
источник
2

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

Если это не было импортировано, то ресурсы, которые были возвращены, были ресурсами по умолчанию, но мои собственные не были включены.

С учетом сказанного, если вы обнаружите, что получаете только список ресурсов по умолчанию, просто проверьте, что вы импортируете application_package_name.R, а не android.R.

Peter Mortensen
источник
2

Моя проблема была в том, что appcompatон не был в той же директории, что и мой проект.

Я узнал об этом при компиляции моего приложения с помощью Ant .

Martin
источник
1

Также убедитесь, что у вас установлена ​​последняя версия плагина ADT, и откройте диспетчер Android SDK, чтобы обновить все инструменты SDK до последней версии. Проверьте наличие обновлений в самом Eclipse. Несоответствующие версии вызвали проблему для меня.

каркать
источник
1

Моя проблема была внутри файла меню. Компилятор не предупреждает вас, если strings.xmlв файлах меню есть ссылки на строки, которых нет внутри . Проверьте, не содержат ли ваши itemфайлы XML в вашем меню какие-либо строки, которых нет в вашем strings.xml. Обычно в android:title.

Стефан Анка
источник
1

Для меня эта ошибка была вызвана тем, что я пытался дублировать существующий res/menuвместо того, чтобы создать один с wizard.

крупный чиновник
источник
1

Все эти ответы не могут работать, если вы используете Maven. Решение для меня было добавить

<genDirectory>${project.basedir}/gen</genDirectory>

в раздел конфигурации Android-Maven-плагин.

бувигер
источник
1

Я нашел решение, почему R.class не создается Eclipse после повторного создания - 2 clean, build и т. Д.

Проблема здесь в strings.xml:

<string name="hello">Hello World, HelloAutoComplete!</string>

<string name="app_name">HelloAutoComplete</string>

По умолчанию они создаются Eclipse при создании проектов.

Определенно вы меняете strings.xml для своих собственных требований. Иногда вы очищаете string.xmls эти две строки из вашего кода:

В файле AndroidManifest.xml возникает проблема:

<application android:icon="@drawable/icon"  android:label="@string/app_name">
<activity android:name=".HelloAutoComplete" android:label="@string/app_name">

Так что он не может общаться с strings.xml.

aarifmkhan
источник
1

Я изменил имя своего XML-файла макета и узнал позже, что XML-файл (в данном случае провайдер виджетов) все еще ссылается на старый XML-макет, который не существует, и это препятствовало автоматической генерации / исправлению класса R.

Говард
источник