R не может быть решена - ошибка Android


1073

Я только что скачал и установил новый 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);
    }
}

но затмение дает мне ошибку

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 иногда любит добавлять оператор «import android.R» вверху ваших файлов, которые используют ресурсы, особенно когда вы просите Eclipse сортировать или иным образом управлять импортом. Это приведет к тому , делают ломаться. Посмотрите на эти ошибочные операторы импорта и удалите их. *

Просматривая примеры учебных пособий по Android, я часто использовал команду Ctrl+ Shift+ Oдля «организации импорта» и генерирования любых пропущенных операторов импорта. Иногда это приводит к неверному оператору импорта, который скрывает R.javaкласс, который автоматически создается при сборке.


32
Это также случается, но это может быть вызвано и наличием файла макета.
ГГц

113
Эта классическая ошибка была в Eclipse в течение ГОДОВ и никогда не исправляется. Тысячи людей сталкиваются с этой же проблемой.
Кэрол

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

18
@ 2-Stroker: это ошибка. Это случилось со мной, когда я создал ветвь нового проекта andorid через WIZARD затмения, и он пожаловался на «R не может быть решена». Мне пришлось закомментировать строки setContentView & getMenuInflater, а затем затмение сгенерировало R.java, после чего я смог раскомментировать setContentView & getMenuInflator. Абрамодж прав, окружающая среда имеет серьезные проблемы, если даже ваш пример «Привет, мир» не компилируется. Исправь это гугл!
CF_Maintainer

5
Как Google не предоставляет eclipse.org средства для получения таких вещей?
Cris

391

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


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

12
точно, если вы скопировали макеты из другого проекта и получаете это, ищите недостающие рисованные объекты - это исправит это мгновенно!
Габор

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

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

5
Да, отлично решить. Когда появляется эта ошибка ... много раз все файлы макета помечаются как имеющие ошибки ... Это потому, что все они ищут R. Однако один из них, вероятно, имеет несвязанную ошибку, которая прерывает сборку. В моем случае отсутствует рисование.
Тодд Пейнтон

201

Всякий раз, когда вы получаете

R не может быть решена

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

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


У меня была эта проблема с образцом ApiDemos. Некоторый недостающий ресурс в файле strings.xml. Ошибки XML перечислены в консоли Eclipse.
lemotdit

благодарю вас! это была моя проблема, у меня был макет, который ошибался, но об этом не было никаких сообщений.

29
Как вы можете проверить на ошибки? Я ничего не получаю в своей консоли при сборке / запуске
Vincent

4
Как узнать, какой XML-файл вызывает ошибку? Затмение не помечает их!
Яр

1
У меня было 2 изображения с одинаковыми именами в папке hdpi (1 с png и 1 с форматом jpg), удаление 1 из них решило проблему
Haseeb Jadoon

134

Мой проект включает в себя r.java.at в начале, R.layout.main работает хорошо. Но после добавления некоторого кода это не работает, и ошибка: R.layout.main не может быть решена. В чем проблема ?

Посмотрите на ваш импорт. Скорее всего, что линия:

import android.R;

буду там. Если это так, удалите его, чтобы ваш проект разрешил R не с классом Android Resources по умолчанию, а с классом, автоматически сгенерированным из вашей папки / res /.


5
Спасибо @ Dimitar, это исправило мою проблему! Похоже, что Eclipse и функция автоматического импорта получили меня, добавив эту строку импорта автоматически.
Стивен

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

Это одна из 5 главных причин, почему люди получают «R not found». Я собрал страницу проблемы / решения с изображениями, которые показывают основные 5 по ссылке ниже. Надеюсь, этот список поможет людям, так как это общая проблема. spragucm.wordpress.com/2014/05/13/…
Крис Спраг

после удаления R в некоторых местах R используется как класс и теперь выдает ошибку. Как это исправить?
Нарендра Джагги

96

И еще одна вещь, которая может вызвать эту проблему:

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

Решение найдено здесь


Я тоже. И когда я выбрал менеджер SDK, вот и все, инструменты сборки обнаруживаются автоматически проверенными для установки, с пометкой, что он не был установлен! Что дает???
Дэвид в HotspotOffice

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

5
Работал на меня, спасибо! Это только усиливает мою мантру: «никогда не обновляйте ничего во время разработки».
Родриго Диас

я слонялся вокруг в поисках ответа, но у меня ничего не получалось. Я думаю, что это была проблема затмения или SDK. Итак, как вы говорите, я просто удаляю предыдущий пакет eclipse и переустанавливаю его. и тогда это работает. Ваш ответ помог
новичкам

Это была проблема в моем случае! Потраченный впустую день, пытаясь исправить ошибку R, добавляя / удаляя ссылки, и пробуя другие варианты. У меня была новая новая установка ADT и создание нового проекта Android, и она все еще получала ошибку. Наконец оказалось, что мне пришлось установить все доступные обновления инструментов Android SDK, инструментов платформы Android SDK и инструментов сборки SDK: p
Saurabh Kumar

87

R.javaфайл, создаваемый плагинами Android Eclipse при создании приложения R.javaсоздается в каталоге "gen". Этот файл генерируется из информации в каталоге "res". Если вы запустите команду «Проект» -> «Очистить ...» в меню Eclipse, она удалит, а затем заново создаст R.javaфайл.

Проблема «R не может быть решена» возникает, когда вы меняете имя пакета в AndroidManifest.xmlфайле. Он использует имя вашего пакета Android для создания подкаталога в каталоге «gen», где хранится R.javaфайл.

Eclipse может иметь проблемы с выполнением clean, потому что он не R.javaпонимает, где находится файл, когда вы изменили имя пакета Android. Вы можете либо переименовать подкаталог genв соответствии с вашим новым именем пакета, либо вы можете изменить свое имя пакета обратно на старое имя. Сделайте чистку, а затем измените имя пакета на новое имя, которое вы хотите. Это работает лучше всего, если вы останавливаете Eclipse от попыток сборки во время изменения имени пакета. В меню «Проект» снимите флажок «Автоматически строить», а также когда диалоговое окно «Очистить ...» спросит, следует ли ему «Начать сборку немедленно», снимите флажок, чтобы он не пытался строить во время изменения название пакета. После того, как вы изменили имя, вы можете снова включить «Автоматическая сборка».

Обратите внимание: если имя вашего AndroidManifest.xmlфайлового пакета не совпадает с именем вашего Java-пакета, Eclipse автоматически добавит «import <имя вашего 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 .. Я уже выбрал «Автоматически строить», но ошибка все еще там.
d_unknown

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 manager

щелкните правой кнопкой мыши свойства проекта-> Java BuildPath, выберите «Библиотека» и добавьте android-support.jar, выполнив следующие действия.

Перейдите в Проект-> Свойства-> Путь сборки Java, затем выберите Порядок и вкладку экспорта. Установите проверенную библиотеку android-support .jar и поместите ее в начало списка. И очистить и восстановить .. Это работает для большинства случаев

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


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, а не eIcon.png. Я нашел ошибку, посмотрев на Консоль. Он возвращал ошибку в файле с
неверным

12

Rэто сгенерированный класс. Если вы используете Android Development Tools (ADT), он генерируется при сборке проекта. Возможно, у вас отключена функция «Автоматически строить».


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

У меня тоже была эта проблема. Оказалось, что я случайно удалил строковый ресурс «app_name» из strings.xmlфайла, что вызывало тихую ошибку. Как только я добавил его обратно, класс R был сгенерирован успешно, и все было восстановлено.


6

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


+1 ДА! Убедитесь, что оно соответствует правильным правилам именования ... [a-z0-9_.]
jasonflaherty

6

Еще одна причина, по которой R.javaможет не произойти автоматическое создание , заключается в том, что у вас есть каталоги, такие как res / drawable-hdpi , res / drawable-mdpi или res / drawable-ldpi .

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


6

Сначала проверьте, есть ли какая-либо ошибка в любом макете XML или нет, если затем разрешите ее.

В противном случае удалите зависимость junit из проекта и пересоберите проект.

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


5

Часто это происходит из-за номера версии MinSDK, который вы указали при создании проекта. Пример:

Если вы хотите, чтобы 2.1 был минимальным, Android 2.1 на самом деле является API уровня 7.

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

Когда вы создаете проект и должны выбрать API «Build Target», последний столбец в этом списке с именем «API Level» показывает число, которое вы ищете при заполнении параметра MinSDK.

Вероятно, это одна из наиболее распространенных ошибок, которая приводит к тому, что R.javaфайл не создается в Project> gen> packagename> R.java.


5

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


5

Просто зайдите в список верхнего меню Android. нажмите на меню Build , в под Build нажмите на перестроить проект .

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


4

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


4

В моем случае у меня была ошибка в моем AndroidManifest.xml. Другие говорили, что ваши XML-файлы не должны содержать ошибок, но я смотрел только в папку res /. Найдите и исправьте как можно больше ошибок, и проблема вполне может решиться сама собой.


Это был виновник в моем случае. Любая ошибка в файле 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.