R неможливо вирішити - помилка Android


1071

Я щойно завантажив і встановив новий Android SDK. Я хотів створити просту програму для тестового драйву.

Майстер створив цей код:

package eu.mauriziopz.gps;

import android.app.Activity;
import android.os.Bundle;

public class ggps extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

але Eclipse дає мені помилку

R не можна вирішити

на лінії

setContentView(R.layout.main);

Чому?

PS: У мене є XML-файл, названий main.xmlпід res/layout/.


Для тих, хто все ще відчуває певну проблему із затемненням, не в змозі оновити / генерувати R.java. Можливе рішення - створити фіктивний xml і просто видалити цей xml. У моєму випадку це рішення
деніл

Чесно кажучи, це звучить так нерозумно (і це є), але змінивши AndroidManifest.xml, потім скасувати це редагування, а потім зберегти файл, який працював на мене. Якщо я очистив проект після цього, він знову зламався. І весь цей час я думав, що Xcode був єдиним IDE, який мав подібні таємничі помилки.
iwasrobbed

3
Ви спробували клацнути правою кнопкою миші проект -> Інструменти Android -> Виправити налаштування проекту?
Сергій

6
Перевірте ваш файл макета XMl, якщо будь-яку помилку в xml ви не можете генерувати R.java, а помилка виникає і після bulid та clean.
swiftBoy

1
Лише підказка: коли я перейшов IDE з Eclipse на Android Studio, це перестало зі мною.
мата

Відповіді:


840

Відстеживши цю проблему, я знайшов цю примітку в документації на Android:

http://source.android.com/source/using-eclipse.html

* Примітка: Eclipse іноді любить додавати у верхній частині файлів, що використовують ресурси, додаток "імпортувати android.R", особливо коли ви запитуєте Eclipse сортувати чи іншим чином керувати імпортом. Це призведе до розриву вашої марки . Зверніть увагу на ці помилкові заяви про імпорт та видаліть їх. *

Переглядаючи зразки навчальних посібників Android, я часто використовую команду Ctrl+ Shift+ Oдля "Організації імпорту" та генерування будь-яких відсутніх заяв про імпорт. Іноді це генерує невірну заяву про імпорт, яка б приховувала R.javaклас, який автоматично створюється під час створення.


32
Це трапляється і так, але пошкоджений файл макета також може викликати це.
ГГц

113
Ця класична помилка була в Eclipse протягом YEARS і ніколи не виправляється. 1000 тисяч людей стикаються з цією ж проблемою.
Керрол

52
Розробники Eclipse, видаліть цей $ £% & "$ & / помилка! Розробники Google, будь ласка, надайте мені пакет $ & $"% & Android, схожий на Xcode для iPhone!
Аврамодж

18
@ 2-Stroker: Це помилка. Це трапилося зі мною, коли я створив новий відділення проекту Andorid за допомогою WIZARD WIZARD, і він поскаржився на "R не можна вирішити". Мені довелося прокоментувати рядки setContentView & getMenuInflater, а потім затемнення породило R.java, після чого я міг відмежувати setContentView & getMenuInflator. Абрамодж має рацію, навколишнє середовище має серйозні проблеми, якщо навіть ваш привіт "привіт світ" не збирається. Виправте Google!
CF_Maintainer

5
Як Google не надає кошти eclipse.org для виправлення подібних предметів?
Кріс

391

Кожен раз, коли у мене проблема з R не генерувалася або навіть зникала, це було пов’язано з певною проблемою у файлі макета XML, яка заважала будувати програму.


21
+1 для цього. У мене був старіший файл styles.xml з parent = "android: WindowTitleBackground", і це порушило мою збірку і запобігло що-небудь породжене "gen". Про помилку насправді не повідомлялося, за винятком вікна консолі, коли я вперше відкрив проект.
Скотт Персінгер

12
саме, якщо ви скопіювали макети з іншого проекту та отримуєте це, шукаєте пропущені чернетки - це миттєво виправить!
Габор

4
Я думаю, у мене така ж проблема, чи є спосіб дізнатися відьом в одному з макетів?
Сергій Кучер

3
Так, мені не вистачало файлу, що малюється, і це заважало навіть створювати файл R. Дивна річ у тому, що я мав android:icon="@drawable/XXX"декларацію про <item>ресурс меню, але не було жодної червоної викрутки, яка б сигналізувала про те, що ресурс, що виводиться, XXX не знайдено. В інших випадках "@drawable/YYY" було позначено, коли РРР не було знайдено, але в цьому випадку немає. З якоїсь причини.
Тейлор

5
Так, відмінне рішення. Коли ви отримуєте цю помилку .. багато разів усі файли компонування позначаються як помилки. Це тому, що всі вони шукають Р. Один з них, однак, швидше за все, не пов’язаний із помилкою, яка перериває збірку. У моєму випадку відсутній малюнок.
Тодд Пейтон

201

Щоразу, коли потрапляєш

R не можна вирішити

потім перевірте, /resчи не існує файлу, який має деяку помилку, і це заважає будувати програму. Наприклад, це може бути файл макета або це може бути пов’язано з деяким відсутнім ресурсом, але ви вже визначили його у файлі XML.

Якщо у вас в папці є додаткові, навіть невикористані (!) Або невикористані (!) Зображення, такі як res / drawables-mdpi, які не відповідають умовам іменування файлів (можуть містити лише [a-z0-9_.]), Клас R.java може не генерувати, викликаючи ланцюжок подій всіх інших посилань, на які посилається. Сподіваюся, це допомагає!


У мене виникли проблеми із зразком ApiDemos. Деякий відсутній ресурс у файлі strings.xml. Помилка XML вказана в консолі Eclipse.
lemotdit

Дякую тобі! це було моєю проблемою, у мене був макет, який помилявся, але повідомлення про це не було.

29
Як можна перевірити помилки? Я нічого не отримую на своїй консолі під час будівництва / роботи
Вінсент

4
Як дізнатися, Який файл xml викликає помилку? Затьмарення їх не відзначає!
Яр

1
У папці hdpi було 2 зображення з такою ж назвою (1 з форматом png та 1 з форматом jpg). Видалення 1 з них вирішило проблему
Хазеб Ядун

134

мій проект включає r.java.at на початку, R.layout.main працює добре. Але після додавання деякого коду він не працює, і помилка R.layout.main не вдається вирішити. яка проблема ?

Подивіться на ваш імпорт. Ймовірно, що рядок:

import android.R;

буду там. Якщо це так, видаліть його, щоб ваш проект вирішив R не з типовим класом ресурсів Android, а з одним автоматично створеним з вашої / res / папки.


5
Дякую @ Dimitar, що вирішив мою проблему! Затемнення та функція автоматичного імпорту, схоже, отримали мене, додавши цю лінію імпорту автоматично.
Стівен

7
У мене також були подібні проблеми, коли я називав макет за допомогою великих літер
Травіс

Це одна з перших 5 причин, за якими люди отримують "R не знайдено". Я склав сторінку проблеми / рішення із зображеннями, які показують основні 5 за посиланням нижче. Істинно сподіваюся, що список допомагає людям, оскільки це є загальною проблемою. spragucm.wordpress.com/2014/05/13/…
Chris Sprague

після вилучення R, у деяких місцях R використовується як клас і дає помилку зараз. Як це вирішити?
Нарендра Яггі

96

І ще одна річ, яка може спричинити цю проблему:

Я встановив новий ADT (v. 22). Він зупинив створення genпапки, яка включає R.java. Рішенням було також встановити нові інструменти для збирання Android SDK від Android SDK Manager.

Тут знайдено рішення


Я також. І коли я вибрав менеджера SDK, ось, ось інструменти збирання відображаються автоматично перевірені на встановлення, із зазначенням, що він не встановлений! Що дає ???
Девід у HotspotOffice

У мене було те саме питання. Я так рада, що ти поділився цим. Я переглянув помилку з власного коду два дні. Я дуже прихильний до Google, оскільки це повідомлення про помилку було дуже важко вирішити, але воно було викликано власною помилкою, хоча інструменти не повідомляють належним чином про те, що його викликає. Я в той же час змінив свій проект, тому я подумав, що я знову винен.
Реджо Корхонен

5
Працювали для мене, дякую! Це просто підкріплює мою мантру: "ніколи нічого не оновлюй під час розвитку".
Родріго Діас

я зависав, шукаючи відповіді, але для мене нічого не працювало. Я думаю, це була проблема затемнення або SDK. так що, як ви говорите, я просто видаляю попередній пакет затемнення і переустановлюю його. і тоді це працює. Ваша відповідь допомогла
початківцям

Це була проблема в моєму випадку! Витратили один день, намагаючись виправити помилку R, додаючи / видаляючи посилання та намагаючись інші варіанти. Моя нова свіжа настройка ADT та створення нового проекту для Android, і досі отримували помилку. Нарешті виявилося, що мені довелося встановити всі доступні оновлення інструментів Android SDK, інструментів платформи Android SDK та інструментів для збирання SDK: p
Saurabh Kumar

87

R.java- це файл, який створює плагіни Android Eclipse під час створення програми. R.javaстворюється під каталогом "gen". Цей файл генерується з інформації в каталозі "res". Якщо ви запустите, виберіть "Проект" -> "Очистити ..." у меню затемнення, він видалить і відновить R.javaфайл.

Проблема "R не може бути вирішена" виникає, коли ви змінюєте ім'я пакету у AndroidManifest.xmlфайлі. Він використовує назву вашого пакета Android для створення підкаталогу під каталогом "gen", де він зберігає R.javaфайл.

У Eclipse можуть виникнути проблеми з чистим виконанням, оскільки він плутається, де знаходиться R.javaфайл, коли ви змінили назву пакета Android. Ви можете або перейменувати підкаталог у, genщоб відповідати вашому новому імені пакета, або ви можете змінити ім'я пакета на старе ім'я. Виконайте чистку, а потім змініть назву пакета на нове ім'я, яке ви хочете. Це найкраще спрацьовує, якщо ви зупиняєте Eclipse від спроби побудови під час зміни назви пакета. У меню "Проект" зніміть прапорець "Автоматично будувати", а також тоді, коли в діалоговому вікні "Очистити ..." запитається, чи слід "Негайно розпочати збірку", зніміть прапорець, щоб він не намагався будувати, коли ви змінюєтесь. назва пакета Після зміни назви ви можете знову ввімкнути "Build Automatically".

Зауважте, що якщо AndroidManifest.xmlназва вашого пакету файлів не відповідає вашому імені пакета Java, Eclipse автоматично закінчиться додаванням "імпорту <ім'я пакета Android> .R;" рядок у всіх ваших .javaфайлах, на які є посилання на R. Якщо ви зміните AndroidManifest.xml ім'я свого пакета, іноді Eclipse не оновлює весь цей доданий імпорт. Якщо це трапиться, використовуйте рефакторинг Eclipse ( ALT+ Shift+ R), щоб змінити оператор імпорту в одному з ваших файлів Java на нове AndroidManifest.xmlім'я пакета. Найкраще це робити, поки ви відключили "Створювати автоматично".


21
Це виглядає як вирізання та вставка без посилання
Casebash

1
Багаторазове копіювання / вставка файлів та рефакторинг імен призводять до однієї проблеми, незважаючи на те, що всі назви файлів і вміст були Ок. Очищення проекту, видалення R.java вручну та всіх заголовків імпорту, а потім відновлення цих заголовків імпорту (все ще із CTRL + SHIFT + O) спрацювало чудово.
hornetbzz

Це працювало для мене. Я змінив назву пакета в маніфесті. Мені довелося використовувати ctrl-shift-O у класах, які посилаються на створені значення класу R, щоб додати правильний імпорт.
Чак Крутсінгер

Це зафіксувало це для мене. Також ми бачили, що проблема імпорту траплялася в минулому, але цього разу проблема в тому, що ім'я пакета в маніфесті не відповідає імені пакета в папці src.
Дім Діапазон

У моїй заяві було дві дії. У одного було інше ім'я пакета, ніж те, проти якого було створено R. Мені довелося імпортувати R вручну, використовуючи щось на кшталтimport com.example.main.package.name.R;
Олівер Моран

85

Те, що сказав Вілл, було правильним

R - це автоматично створений клас, який містить константи, які використовуються для ідентифікації ваших ресурсів. Якщо у вас немає файлу R.java (це буде gen / eu.mauriziopz.gps / R.java в> Eclipse з 1.5 SDK), я б рекомендував закрити і знову відкрити проект або перейти до> Project> Build all (і вибираючи "Будувати автоматично", поки там, як рекомендує> Йозеф). Якщо це не спрацює, ніж спробувати створити новий проект, якщо проблема відтворена, ніж> опублікувати тут ще раз, і ми підемо детальніше.

але я дізнався, що була ще одна проблема, яка спричиняла першу. Інструменти в каталозі SDK не мали дозволів виконуватись, тому це було як би не існувало для Eclipse, тому він не створив R.javaфайл.

Тож зміна дозволу та вибір "Автоматично будувати" вирішив проблему.


@Jignesh - cd $ANDROID_SDK_ROOT/build-tools/<version>. Потім chmod a+xна файли , такі як aapt, aidl, dexdump, dxі т.д. , ANDROID_SDK_ROOTповинні бути встановлені у вашому середовищі, і він буде вказувати на вашій установки SDK. Наприклад, /opt/android-sdk. Важливо встановити і те, ANDROID_SDK_ROOTі ANDROID_NDK_ROOTтому, що інструменти Android використовують їх внутрішньо. Див. Рекомендований каталог NDK? у списку користувачів NDK.
jww

@Lewis .. Я вже вибираю "Будувати автоматично", але помилка все ще є.
невідомий

39

R - це автоматично сформований клас, який містить константи, які використовуються для ідентифікації ваших ресурсів. Якщо у вас немає файлу R.java (це був би gen / eu.mauriziopz.gps / R.java в Eclipse з 1.5 SDK), я рекомендую закрити і знову відкрити проект або перейти до Project> Build all (і вибір пункту "Автоматично будувати", там, як рекомендує Йозеф). Якщо це не спрацює, ніж спробувати створити новий проект, якщо проблема буде відтворена, ніж опублікувати тут ще раз, і ми підемо детальніше


8
Це працювало для мене, але мені довелося спочатку "Проект -> Очистити ...".
Метт Конноллі,

27

Закрийте всі файли, очистіть проект, перезапустіть Eclipse.


23
+1 Але іноді для цього потрібні 3 перезавантаження затемнення і 7 проектів очищаються між ними. Просто продовжуйте намагатися ;-) #rant
Маттіас Бауш

3
Змішайте його з дотиком (редагування + збереження) .xml файлів (strings.xml ...).
Алі Шакіба

24

Варто зареєструватися AndroidManifest.xml. Атрибут packageмає правильне значення.

Це є:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...

Після зміни цього R.javaзаповіт буде породжено заново.


Моє оригінальне ім'я пакета було com.xxxxxdroid.router. Я створив нову версію свого додатка com.xxxxxdroid2.router. Після цього мені довелося оновити назву пакета в AndroidManifest.xml, але лише набагато пізніше після того, як я почав копіювати та вставляти старі класи поперек. Дякуємо за вказівник!
Євген ван дер Мерве

це вирішило мою проблему, я працював у XML-файлі, радий, що згадав, який із них, я завантажував їх ... дякую ...
ГГц

19

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

Наприклад, якщо com.example.myappу вашому пакеті є кореневий простір імен, ви можете додати активність до com.example.myapp.activitiesпростору імен.

Це призведе до помилки "R не може бути вирішена".

Щоб виправити імпорт R у просторі імен за замовчуванням у вашій діяльності, слід:

import com.example.myapp.R;

Це допомогло мені, я перемістив свою діяльність у пакет нижче кореня, додавши кореневий пакет як імпорт (import com.example.myapp.R;) вирішив проблему.
eageranalyst

19

Поряд із чудовими пропозиціями з попередніх відповідей, переконайтеся, що ваша ціль на Android встановлена:

  1. Клацніть правою кнопкою миші на своєму проекті
  2. Виберіть "Властивості"
  3. Виберіть Android у лівому меню
  4. Поставте прапорець біля відповідної цілі збірки проекту.
  5. Клацніть Застосувати та Гаразд

Правка: Через рік я знайшов ще одну причину. У моїй папці, що малюється, було зображення .jpg з тим самим назвою .png зображення. Посилання на це зображення в моєму коді, мабуть, переплутало програму, і це призвело до помилки "R не можна вирішити".


17

Переконайтеся, що ви встановили інструмент для збирання інструментів Android для sdk

властивості проекту клацніть правою кнопкою миші-> Java BuildPath виберіть Бібліотека та додайте android-support.jar виконайте наступні дії.

Перейдіть у розділ Проект-> Властивості-> Шлях збірки Java, ніж виберіть вкладку Порядок та експорт. Встановіть перевірену бібліотеку .jar з підтримкою Android та підніміть її у верхній частині списку. І очистити, і відновити .. Це працює в більшості випадків

введіть тут опис зображення


15

Просто у мене мільйонний раз виникла ця проблема і зрозумів, що її викликає: я створив XML-файл із великими літерами в імені. Усі ваші імена файлів XML /resповинні відповідати [a-z0-9\\._].


Крім того, я щойно помітив, що переповнення стека вимагає від нас уникнути всіх відхилень.

14

Найпростіше рішення - Іноді вам просто потрібно зберегти XML-файл, над яким ви працювали, щоб змусити автогенератор розпочати роботу.

Збережіть файл (наприклад, main.xml), після чого видаліть файл R.java і подивіться, чи відрегульована R.java вирішить проблему вирішення R.


Правда. Іноді, якщо він говорить про те, що у вашому XML є проблема, де її немає (червона криволінійна лінія або жовтий знак оклику), видаліть правопорушну рядок, збережіть файл XML, вставте рядок назад і збережіть його знову. Якщо ви не будуєте автоматично, будуйте його знову, і це може спрацювати. Затемнення часом буває дурним. :)
hotshot309

Незважаючи на інші перелічені вище відповіді, ця виявилася для мене правильною. Спочатку я отримав повідомлення "не можу знайти APK", коли я пішов збирати зразок коду, потім зробив "Очищення", яке створило тонну помилок "R не може бути вирішено", а потім просто відкрити .xml файл і вручну зберегти його помилки були очищені, і я міг скласти.
sXe

Так правда: Після очищення проектів R.java пішов - редагування та збереження strings.xml вирішило проблему.
BurninLeo

12

Перевірте назви файлів XML. Будьте впевнені, що всі вони малі.

Також переконайтесь, що будь-які назви ресурсів зображень також містяться в нижньому випадку. У мене була написана велика літера в назві мого файлу jpg, і це спричинило невирішену R помилку прямо в моєму проекті.


+1 для цього було моєю проблемою. Ви повинні назвати свої зображення так: eicon.png not eIcon.png. Я виявив помилку, переглянувши консоль.
Поверталася


10

Ця помилка з’явилася під час моєї установки x64 Linux Mint. Виявилося, що результатом став збій у ADBдвійковій, оскільки ia32-libsпакет не був встановлений. Просто запуск apt-get install ia32-libsта повторна запуск програми Eclipse виправили помилку.

Якщо у вашому дистрибутиві x64 немає ia32-libs, вам доведеться пройти Multiarch.

Перевірте №4 та №5 у цій публікації: http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883

Сподіваюся, що це комусь допоможе.


Варто зазначити, що якщо у вас 64-розрядна установка Linux, вам знадобляться ia32-libs. Якщо у вас цього немає, спроба виконання команди adb призведе до дивного повідомлення, яке говорить про те, що він не може знайти файл або каталог.
rs_atl

10

Можливо, вам доведеться оновити / встановити інструменти SDK. Перезапустіть Android SDK Manager знову та встановіть новий елемент: Android SDK Build-tools.one одним видаленням, виправте, який з них працює.введіть тут опис зображення


9

Можливо, вам доведеться оновити інструменти SDK. Знову запустіть Android SDK Manager та встановіть новий елемент: Android SDK Build-tools.

введіть тут опис зображення


8

У мене була і ця проблема. Виявилося, що я ненароком видалив рядок "string_name" з strings.xmlфайлу, що спричинило мовчазну помилку. Після того, як я додав його назад, клас R був генерований успішно, і все було створено.


6

Спробуйте зробити назву нового файлу макета XML невеликим регістром. Наприклад, використовувати my_file.xmlзамість myFile.xml.


+1 ТАК! Переконайтесь, що воно відповідає правильним умовам іменування ... [a-z0-9_.]
jasonflaherty

6

Ще одна причина R.javaне може генеруватися автоматично, якщо у вас є каталоги , як рез / витяжка-ІПЧР , рез / витяжка-MDPI , або RES / витяжка-ldpi .

1.6+, здається, добре з цими каталогами, але 1.5 не хоче їх. Коли я видалив ці каталоги, знову R.javaпочав автогенеруватися для мене.


6

Спочатку перевірте, чи є помилка в будь-якій версії XML чи ні, якщо потім спочатку її усуньте.

В іншому випадку усуньте залежність від проекту і відновіть проект.

введіть тут опис зображення


5

Часто це трапляється через номер версії MinSDK, який ви вказали під час створення проекту. Приклад:

Якщо ви хочете, щоб 2.1 був мінімальним, Android 2.1 - це фактично API рівня 7.

Ви можете бачити, про що я говорю, переглядаючи завантажений та встановлений SDK. Перейдіть до місця встановлення SDK ( C:\android-sdk-windowsнаприклад) та відкрийте папку під назвою "платформи". Ви побачите щось на зразок "android-7", вказане у вигляді папки, і якщо ви відкриєте, що є source.propertiesфайл, який при відкритті з текстовим редактором покаже вам відповідну версію платформи.

Коли ви створюєте проект, і вам потрібно вибрати API "Створення цілі", останній стовпець у цьому списку під назвою "Рівень API" показує число, яке ви шукаєте під час заповнення налаштування MinSDK.

Це, мабуть, одна з найпоширеніших помилок, яка призводить до того, що R.javaфайл не створюється під Project> gen> ім'я пакета> R.java.


5

Видалити main.out.xml. Я новачок у цьому і ще не знаю, для чого цей файл використовується, але його видалення усунуло проблему.


5

Просто перейдіть до списку головних меню Android. натисніть на меню " Збірка ", в розділі "Збірка" натисніть кнопку " Перебудувати" .

введіть тут опис зображення


4

У мене були приклади Android 8 і намагався використовувати Android 7 SDK. Коли я закрив проект і знову відкрив папку додатків і вирішив використовувати Android 8 SDK, він зміг знайти файл R. Сподіваюсь, це допомагає.


4

У моєму випадку у мене виникла помилка AndroidManifest.xml. Інші сказали, що у ваших XML-файлах не повинно бути помилок, але я дивився лише у res / folder. Знайдіть і виправте якомога більше помилок, і проблема цілком може вирішитись.


Це був винуватцем моєї справи. Будь-яка помилка у файлі manifest.xml може спричинити цю проблему, якщо R.java ще не побудований.
Скотт Біггс

4

У випадку, якщо хтось зацікавлений (я можу тут врятувати ваше життя), у мене була помилка, R.xmlяку неможливо вирішити, дещо інша в проекті GLS. Гмммм. Заглянувши R.java, я знайшов клас, створений автоматично XML.java, (я думаю) його там не було.

Рішення? Потрібна була нова папка в res: res\xmlі файл, який викликався default_values.xml там. Тоді все було гаразд.

Про всяк випадок, якщо ви не отримали цього файлу, це:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
</PreferenceScreen>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.