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


309

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

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

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


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

Ответы:


177

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

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

...и...

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

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


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, который не допускается Или когда у вас есть ссылки, которые не указывают на существующие файлы и т. Д.


17

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

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

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


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

10

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

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

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

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

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

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

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


9

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

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

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


строка в 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)

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


Мой ответ единственный, который относится к вопросу. все еще получил только 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 в первую очередь!


5

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


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

4

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


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


4

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

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


4

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


3

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

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

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

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

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


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-файлах. Как только я набрал то, что я удалил, это снова заработало :)


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.


2

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

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


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.


1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.