R не может быть решена - ошибка Android - PullRequest
1042 голосов
/ 20 мая 2009

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

Ответы [ 106 ]

832 голосов
/ 16 июля 2010

После отслеживания этой проблемы, я нашел это примечание в документации Android:

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

* Примечание: Eclipse иногда любит добавлять оператор "import android.R" на верх ваших файлов, которые используют ресурсы, особенно когда вы просите Eclipse сортировать или иным образом управлять импортом. это заставит ваш сделать сломаться. Посмотрите за эти ошибочные импорта заявления и удалить их. *

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

387 голосов
/ 27 января 2010

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

198 голосов
/ 06 мая 2010

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

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

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

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

132 голосов
/ 25 июля 2009

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

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

import android.R;

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

95 голосов
/ 17 мая 2013

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

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

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

86 голосов
/ 04 марта 2010

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 от попыток собрать пока вы меняете название пакета. Под меню «Проект» снимите флажок «Автоматически строить», а также когда Диалог «Очистить ...» спрашивает, должен ли он «Начать сборку немедленно» снимите флажок, чтобы он не пытался строить, пока вы меняете имя пакета. После того, как вы изменили имя, вы можете включить "Build Автоматически "снова включите.

Обратите внимание, что если ваше AndroidManifest.xml имя пакета файла не совпадает имя вашего пакета Java, Eclipse в конечном итоге автоматически добавит "импортировать <имя вашего пакета Android> .R;" строка во всех ваших .java файлах которые имеют какие-либо ссылки на R. Если вы измените свой AndroidManifest.xml имя пакета, иногда Eclipse не обновляет все эти добавленные импорт. Если это произойдет, используйте рефакторинг Eclipse ( ALT + Shift + R ), чтобы изменить оператор импорта в одном из ваших файлов Java на Ваше новое AndroidManifest.xml имя пакета. Лучше всего это сделать пока вы отключили «Автоматически строить».

83 голосов
/ 20 мая 2009

То, что сказал Уилл, было правильно

R - это автоматически сгенерированный класс, который содержит константы, используемые для идентификации ваших> ресурсов. Если у вас нет файла R.java (это будет файл gen / eu.mauriziopz.gps / R.java в> Eclipse с 1.5 SDK), я бы порекомендовал закрыть и снова открыть ваш проект или перейти к> Project> Build all (и выбрав «Автоматически строить», пока есть рекомендация> Йозеф). Если это не сработает, попробуйте создать новый проект, если проблема будет воссоздана, чем> опубликуйте здесь снова, и мы углубимся в детали.

но я узнал, что была другая проблема, которая вызывала первую. У инструментов в каталоге SDK не было разрешений на выполнение, так что это было похоже на то, что Eclipse не существовал, поэтому он не создавал файл R.java.

Таким образом, изменение разрешения и выбор «Автоматически строить» решили проблему.

38 голосов
/ 20 мая 2009

R - это автоматически сгенерированный класс, который содержит константы, используемые для идентификации ваших ресурсов. Если у вас нет файла R.java (это будет gen / eu.mauriziopz.gps / R.java в Eclipse с 1.5 SDK), я бы порекомендовал закрыть и снова открыть ваш проект или перейти в Project> Build all ( выбрав "Построить автоматически" в то время как там, как рекомендовал Йозеф). Если это не сработает, попробуйте создать новый проект, если проблема воссоздается, а затем опубликуйте здесь снова, и мы рассмотрим более подробно.

27 голосов
/ 12 ноября 2010

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

23 голосов
/ 21 сентября 2011

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

То есть:

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

После того, как вы это измените, R.java будет сгенерирован заново.

...