Розробка для Android в Eclipse: R.java не відновлюється


309

Я дізнався, що мій R.java ніколи не оновлюється, тому він не містить інформації про мої нові ресурси, тому я вирішив видалити його і подумав, що Eclipse створить новий. Але цього не сталося, і у мене зараз немає R.java. Як можна відновити його?

Я використовую Windows 7.

З одного з коментарів: "Doing Project -> Clean - це те, що викликало проблему для мене. Очищення видаляє R.java ... і з будь-якої причини плагін не відновлює файл."


моє рішення при очищенні не спрацювало: мені потрібно було завантажити Інструменти збирання у менеджері SDK, а потім перезапустити систему. У мене ADT 22.3.0.
Мораднеджад

Відповіді:


177

Цей сайт пропонує:

якщо у проекті запустити чисту, він повинен відновити всі створені файли Java, а саме R.

... і ...

У програмі Eclipse в меню Проект є автоматична збірка опцій. Це допоможе вам створити файл R.java щоразу, коли будуть внесені зміни. Параметр «Очистити ...» також є в розділі Project.

Цей сайт пропонує інше рішення.


1
Хто б міг подумати, дякую хлопці +1, тут у мене виникли проблеми з моїм макетом, і тому R.Java не створювався. Чудові голови вгору! Ура.

101
Робити проект-> Очистити - це те, що спричинило проблему для мене. Очищення видаляє 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.
  • Переконайтесь прапорець Проект -> Створення автоматично . Якщо ні, створити його вручну через Menu -> Project -> Build Project.
  • Зачекайте кілька секунд, щоб помилки зникли.
  • Якщо це не працює, видаліть усе з / gen / папки
  • Якщо це все ще не працює, спробуйте клацнути правою кнопкою миші ваш проект -> Інструменти Android -> Виправити властивості проекту .
  • Перевірте свої * .властивості файли (у кореневій папці вашої програми) та переконайтесь, що посилання там не порушені.
  • Клацніть правою кнопкою миші ваш проект> Властивості> Android . Подивіться розділи "Цілі та бібліотека проекту" в правій частині сторінки. Ціль збирання має відповідати цілі на AndroidManifest.xml. Тож якщо на AndroidManifest встановлено ціль 17, переконайтесь, що ім'я цілі - Android 4.2. Якщо у вашій Бібліотеці є X під посиланням, видаліть і повторно додайте бібліотеку, поки не з’явиться зелена галочка. Це може статися, якщо ви перемістили кілька файлів і папок.

Що робити, якщо R не відновлюється

Зазвичай це відбувається, коли у вас зламаний XML-файл.

  • Перевірте помилки у файлах XML, головним чином у межах /res/ папці
  • Загальні місця є /layout/і/values/ , особливо , якщо ви змінили один з них в останній час
  • Перевірка AndroidManifest.xml. Я вважаю, що часто змінюю рядок і забуваю змінити ім'я рядкаAndroidManifest.xml .
  • Перевірте, що Android SDK Build-toolsвстановлено. Вікно -> Диспетчер SDK для Android -> Інструменти -> Інструменти для збирання SDK для Android
  • Переконайтеся, що під час оновлення 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 Будувати-інструменти це рішення для мене, upvoted

1
Я прочитав десятки відповідей, і лише в цій згадується перевірка наявності інструментів SDK Build. Я сліпо дозволяю eclipse завантажувати та встановлювати всі мої інструменти Android, коли це пропонують зробити так. Це повністю пропустило цю частину.
Джастін Аквадро

1
Перевірте консоль, можливо, ви отримаєте детальну помилку, яку потрібно виправити, а потім зможете побудувати. Це допомогло в моєму випадку
david72

40

У мене було те саме питання. Коли я перевірив це, я виявив, що ім'я ресурсу XML під макетом не має правильної конвенції іменування. На ньому були великі літери. Тож я перейменував це, щоб усі літери були малі, і магія спрацювала.


2
tnx ... нерозумно мені здається, що я можу використати верхній регістр у своїх назвах макета
Кевін

працював і для мене: консоль повідомила про це: [2010-09-22 16:19:40 - мій проект] res \ dravable-ldpi \ downloadNow.png: Неправильне ім'я файлу: повинно містити лише [a-z0-9_.]
самі

1
Спасибі, це була моя проблема. У мене був файл .xml у папці макета з великим написом, і весь мій файл R.java відсутній / через нього не генерувався. Єдиний спосіб знати це - усвідомити, що конвенція про іменування не дозволяє капіталу; помилок не було.
Lemmings19

1
При іменуванні файлів або атрибутів ресурсів, спробуйте назвати його так, як імена змінної в Java. R.class розміщує імена файлів ресурсів, тобто id, що витягуються, xml файлів із загальнодоступними статичними остаточними питаннями, тому введення "-", "спеціального символу" призведе до припинення генерування R, оскільки ці символи можуть мати інші арифметичні засоби.
IronBlossom

1
Так, це була проблема для мене. Файл у моєму res / xml посилався на файл макета, який не існував, і, мабуть, це призводить до того, що R.java не генерується, тому якщо я запускаю «Очистити», це спричинило відсутність R.java, що призвело до сотень помилок імпорту ...
Серін

28

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


17

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

Якщо з якихось причин це не працює: переконайтеся файли layout.xml не містять помилок. Eclipse, здається, трохи помиляється: іноді він не відзначає помилок у XML, ані в програмі пакета. У такому випадку: погляньте на "консоль" або "проблеми" після використання "чистого". Усі помилки мають бути відображені там. Зафіксуйте їх і повторно очистіть.

ПРИМІТКА: НЕ потрібно виправляти помилки, які ви отримуєте через відсутній файл R! Просто виправте XML-файли та інші помилки проекту та використовуйте чисто!


Переконайтеся, що умови вашого імені файлів ресурсів правильні. @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 не оновлюється;
=> Ідентифікатор не розпізнається ...


рядок у string.xml є "<string name =" app_name "> ім'я програми </string>". Вибачте, у мене була проблема з моєю публікацією.
Glaux

9

Android додав інструмент побудови SDK ADT 22 для механізму побудови. Вам просто потрібно виконати наступні дії.

  1. Оновіть Android SDK Tool
  2. Оновіть інструмент платформи Android SDK
  3. Оновіть Android SDK Build Tool
  4. Додайте шлях інструменту збирання до змінної шляху. (шлях до ---- ВАШОГО ДИРЕКТОРНОГО ПАРТУ \ android-sdk \ build-tools)

Це вирішить питання.


Моя відповідь - це єдине, що стосується питання. досі отримали лише 3 голоси. дивно!
МістерІндія

8

Якщо ваш R.java не генерується, одним із рішень є видалення файлу макета під назвою "blabla.out.xml".

Видаливши цей файл, спробуйте очистити проект з меню Проект -> Очистити .


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. Початок затемнення:

    sudo eclipse
  4. Запустити проект -> Очистити в затемненні


відмінна. а також змушує adb працювати. Просто нагадуйте, що я повинен встановити це при перевстановленні ubuntu.
Yeung

таке ж рішення стосується Debian amd64
Markus Peröbner

Ця відповідь stackoverflow.com/questions/19523502/… дає свіжіші вказівки, ia32-libs не існувало на Elementary
Singagirl

6

Ви на 100% маєте помилку в XML-файлі , але перевірка XML не показує вам помилку. Саме тому вам потрібно спочатку перевірити свої XML-файли!


5

ЗАВЖДИ корисно поглянути на вкладку Проблеми у затемненні. У моєму випадку я отримував повідомлення про помилку " андроїд не в змозі вирішити цільовий" android-8 " ", що не дозволяло створювати R.java. Отже, я виправив імпортовану ціль до тієї, яку я використовував у файлі default.properties , після чого я здійснив очищення через Projects-> Clean and voila! R.java генерується автоматично! Сподіваюся, це допомагає!


Дякуємо, що вказали на вкладку проблем. Я новачок в android і eclipse, тому не користувався ним раніше і отримував розчарування. Це перше місце, на яке слід звернути увагу при виникненні цієї помилки.
Maadinsh

4

Проект очищення, закриття Eclipse, його повторне відкриття та запуск мого проекту нарешті змусив мою R.java знову з’явитися… Сподіваюся, це допомагає


Мені також довелося перезавантажитись, Eclipse скаржився на відсутність aapt, але він був присутній ....
Filippo Mazza


4

R.java ніколи не буде генеровано, якщо є якісь помилки в res папці . Наприклад, у підпапці, що малюється, є два файли, які мають однакове ім'я, один - icon.png, а другий - icon.html.

Ви можете побачити помилку у вікні журналу консолі Eclipse, в якому сказано "Значок введення ресурсу вже визначено." Після видалення icon.html папку можна очистити або просто видалити gen. Ви побачите, що R.java створений.


4

Я виявив, що будь-який файл із великими літерами у resпапці створить цю помилку. Це трапилось зі мною файлом PNG, який я додав і забув.


3

Прочитавши багато публікацій та відео YouTube, я виявив, що кожен з нас R.javaзник безвісти з різних причин.

Ось як я це зафіксував у Eclipse:

  • Створіть R.java у genпапці вручну та збережіть.
  • Після цього перейдіть до проекту та натисніть «Очистити»

З'явиться таке повідомлення, і ваш файл буде автоматично переписаний:

R.java була змінена вручну! Повернення до створеної версії!


1
Ануп .. Я це зробив /// Але видалити лише тоді, коли я його почистив ... Проблема все ще для мене не вирішена!
ejjyrex

3

Для мене я два рази пов'язував програму v7 appcompat. Як би там не було, у програмі Eclipse клацніть правою кнопкою миші назву проекту у Провіднику пакунків або Навігаторі, перейдіть до Властивості, Android та зніміть прапорці в розділі Бібліотека. Можливо, після цього вам знадобиться побудувати -> Очистити.


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, і відкрийте диспетчер SDK Android для оновлення всіх інструментів SDK до останньої версії. Перевірте наявність оновлень і в самому Eclipse. Невідповідні версії спричинили проблему для мене.


1

Моя проблема полягала у файлі меню. Здається, компілятор не попереджає вас, якщо рядки, які не існують всередині strings.xml, посилаються на файли меню. Перевірте, чи ваші itemфайли X у меню XML посилаються на будь-які рядки, яких немає у вашому strings.xml. Зазвичай в android:title.


1

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


1

Усі ці відповіді не могли працювати, якщо ви користуєтесь Maven. Рішення для мене було додати

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

до розділу конфігурації плагіну для android-maven.


1

Я знайшов рішення, чому R.class не робиться Eclipse після того, як він зробив його ще раз - 2 очистити, наростити і т.д.

Проблема тут у 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.