пакет R не существует

114

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

Теперь это касается простых webviewприложений. o.0

R.string.app_nameэто error'd мой main.xmlи string.xmlвсе в порядке. Я ооочень запутался.

Я повторно открыл старую версию для "borrow"некоторого кода, и он был залит, R. errors.я сделал чистку и ничего не изменилось, кроме импорта R.android, добавленного вверху.

Я даже загрузился в Netbeans и получаю то же самое. Очистить не получается. Могу я сам записать R.javaфайл?

Что это за Rштука? нет R. должно соответствоватьR.java

Тэз Райдер
источник
1
проверьте папку res на наличие ошибок, если у вас есть проекты, добавленные в качестве библиотеки, проверьте их
Санни Кумар Адитья
1
Нажмите Alt + Enter в строке setContentView (R.layout ..., чтобы добавить импорт.
live-love

Ответы:

128

Для всех, кто сталкивался с этим, я провел рефакторинг, переименовав папки пространства имен. Я просто забыл также отредактировать AndroidManifest, поэтому и получил эту ошибку.

Убедитесь, что вы это тоже проверили.

Матис Сегерс
источник
1
Кажется, что я могу получить доступ к R только из моих классов активности. Я получал эту ошибку, пытаясь получить к ней доступ из других файлов классов.
Джо Лапп
85

Чтобы упростить:

import your.app.package.R;

Конечно, заменив your.app.packageпакет вашего приложения.

Во всех классах, которые используют ссылки на ресурсы R, удалите все остальные importс помощью .R, т.е.import android.R;

окодо
источник
3
При использовании Cordova это правильное решение. Протестировано с Cordova 3.0.9
Питер,
1
Собственно, моя ошибка. Это позволяет проекту Cordova СОЗДАТЬ должным образом, однако экран-заставка по-прежнему НЕ появляется ... Таким образом, это решение фактически не решает проблему.
Питер,
Это то, что мне нужно было сделать при преобразовании тестового проекта Eclipse в модуль Android Studio.
RightHandedMonkey
Если вы используете телефонную связь и добавляете вышеуказанный оператор импорта в файл плагинов, обязательно удалите платформу и добавьте снова. Как это phonegap platform remove androidиphonegap platform add android
Фаваз
54

TL; DR , если вы получаете сообщение об ошибке «пакет R не существует», возможные причины:

  • некоторая ошибка в файлах ресурсов XML
    -> исправить ошибки XML
  • текущий пакет отличается от Rпакета (см. package атрибут в AndroidManifest.xml)
    -> Rкласс импорта , например import com.example.android.R;
    -> или используйте соответствующий пакет в исходном коде, например package com.example.android;
    ->, или измените атрибут пакета в AndroidManifest.xml на <manifest xmlns:android="..." package="com.example.android" ...>, если это необходимо
  • используемые Rидентификаторы взяты из системных ресурсов
    -> не импортировать android.R, а использовать префикс для идентификаторов-нарушителей android., например, android.R.layout.simple_list_item_2
    вы можете импортировать android.Rвместо префикса идентификаторов, конечно, но тогда вы больше не сможете импортировать Rкласс приложения и должны иметь префикс идентификаторов приложений, например com.example.android.R.id.main_menu.

R Класс автоматически генерируется из ресурсов приложения. Он содержит ids для этих ресурсов и содержится в пакете, названном в <manifest> теге в соответствующем AndroidManifest.xmlфайле.

Если в файлах XML ресурсов нет ошибок, R.javaисточник будет создан в подкаталоге пакета ниже gen/и скомпилирован.


В пакете находится еще один Rкласс android. Этот android.Rкласс содержит несколько вложенных классов, которые, в свою очередь, содержат ids и другие значения для системных ресурсов.


Чтобы использовать класс в Java, вы должны назвать класс целым пакетом, например

java.util.List<Object> list = new java.util.ArrayList<Object>();

или импортируйте класс, а затем используйте его без пакета

import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();

Вы также можете использовать класс без названия пакета, если и текущий класс, и используемый класс находятся в одном пакете, например

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}
Олаф Дитше
источник
1
В моем случае проблема заключалась в пути к классам com.android.tools.build:gradle:3.3.0. Я изменил его на путь к классам com.android.tools.build:gradle:3.2.1, и проблема решена.
Mohit Rajput
25

Никогда, никогда не пытайтесь написать класс R самостоятельно!

Вы импортировали правильный класс R в свои файлы?

дела

import android.R;

вместо того

import com.example.R;

кажется проблемой для многих людей. После очистки и сборки мои классы иногда импортируют не тот.

Дж. Маес
источник
3
Но я не понимаю, что R не было, когда я изначально кодировал и выполнял программу.
Taz Ryder
12

Если вы разрабатываете в студии Android и изменили имя пакета, вам следует изменить имя пакета в манифесте Android и файле Gradle приложения.

 applicationId "change here your package name"

и в файле манифеста

 package="change here your package name"
Милон
источник
Ага. Например, немного другое использование заглавных букв в названии приложения.
Стив Уайт
9

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

Нет. Вы не можете написать свой собственный файл R.java, он должен быть сгенерирован компилятором ресурсов.

Проверьте наличие ошибок во всех ваших XML-файлах.

Нандиш
источник
1
Какие ошибки и как их обнаружить новичку?
user1725145 07
6

Класс R - это Java-код, автоматически сгенерированный из ваших XML-файлов (макет пользовательского интерфейса, строки интернационализации и т. Д.). Если код раньше работал (как кажется), вам нужно указать своей среде IDE, чтобы как-то регенерировала эти файлы :

  • в IntelliJ выберите Инструменты> Android> Создать источники для <project>
  • (Если вы знаете способ использования другой IDE, не стесняйтесь редактировать этот ответ!)
DomQ
источник
Это был ответ, который я искал. Спасибо .. +1
Adhikari Bishwash
5

Я полагаю, раньше это работало, а теперь нет ..

Это может произойти, если вы измените имя ПАКЕТА в файле МАНИФЕСТА.

<manifest
   package="com.example.android...."

Если вы хотите изменить название пакета

  1. Измените имя пакета вручную в файле манифеста.
  2. Щелкните свой класс R.java и нажмите F6. Это позволит вам переместить класс в другой пакет, и все ссылки на этот класс будут обновлены.
Эмануэле Греко
источник
Вы бог! Я менял свой проект с com.example.rickydam.txtbooksна com.txtbooks.txtbooks, создав новый проект, и я переместил все в новый проект, но он не смог найти R. Я пробовал аннулировать кеши, синхронизировать с gradle, очистить проект, перестроить проект, переустановить инструменты SDK ... Ничего не работало! Но ваше решение устранило мою проблему! Еще раз спасибо! Продолжайте кодировать!
Ricky Dam
4

Я только что столкнулся с этой ошибкой при использовании Bazel для создания приложения для Android:

error: package R does not exist
                + mContext.getString(R.string.common_string),
                                      ^
Target //libraries/common:common_paidRelease failed to build
Use --verbose_failures to see the command lines of failed build steps.

Убедитесь, что ваш android_library/ android_binaryиспользует AndroidManifest.xmlс правильным package=атрибутом, и, если вы используете custom_packageатрибут android_libraryили android_binary, убедитесь, что он написан правильно.

Джин
источник
3

Удалить импорт android.R; из всех файлов .. как только очистите проект и соберите проект .... Он сгенерирует

Сатиш
источник
3

Пример: Мой пакет - com.example.mypc.f01 , чтобы исправить ошибку, добавьте строку ниже в Activity:

import com.example.mypc.f01.R;

O Thạnh Ldt
источник
3

Ниже приведены некоторые методы, которые можно использовать для устранения этой ошибки: -

  1. Очистите свой проект, Buidl-> clean Project
  2. Перестроить проект, Сборка -> Перестроить проект
  3. Откройте манифест и проверьте, не хватает ли ресурса
  4. Макет регистрации для определенного идентификатора, если его нет, добавьте его
  5. Если вышеуказанные шаги не сработали, перезапустите студию Android, сделав кеш недействительным.
Будди Шарма
источник
2

В моем случае я понял, что создаю несколько пакетов в проекте. В манифесте Android я обнаружил, что имя провайдера неправильно содержит значение MyContentProvider вместо .provider.MyContentProvider. Мой основной пакет (с пользовательским интерфейсом) был co.companyname.database.provider вместо co.companyname.database.

Затем на операторах импорта для затронутого класса я просто щелкнул правой кнопкой мыши и попросил Android Studio (0.8.6) оптимизировать мои операторы импорта. Я также заметил, что если вы ищете .R в строке поиска AS в верхнем правом углу IDE, вы можете найти автоматически сгенерированный файл R.java, который является частью вашего пакета. На этом этапе вам не нужно ничего менять. Studio следует исправить проект после того, как вы исправите файл манифеста Android и выполните повторную сборку.

Еще один момент: в одном классе я использовал toString (). Length () для оценки строки, но заменил их на TextUtils.IsEmpty (stringVal); Не могу придумать ничего другого, что я сделал для решения проблемы.

Надеюсь, это кому-то поможет.

NB - Все это в AS 0.8.6

PS

R.java генерируется автоматически, поэтому прочтите заголовок: / * АВТО-СОЗДАННЫЙ ФАЙЛ. НЕ МОДИФИЦИРУЙТЕ. * * Этот класс был автоматически создан инструментом * aapt из найденных им данных ресурса. Его * не следует изменять вручную. * /

Томми К.
источник
2

Когда я испытал это, я создал новый проект и скопировал файлы из моего старого проекта в мой новый.

  1. Начать новый проект
  2. Добавьте старые файлы в новый проект (скопируйте и щелкните правой кнопкой мыши Layout, drawables, com.packagename, ...), чтобы вставить файлы моих старых проектов.

Однако у меня все еще была та же проблема: R does not exist . Затем я понял, что скопировал и вставил манифест из своего блокнота в манифесты Android Studio и не изменил имя пакета в файле манифеста.

Следовательно, как только я изменил имя пакета в манифесте на имя нового проекта, новый проект, который я создал, работал нормально.

Хесус Рохо
источник
1

Какие файлы вы импортируете в файлы с ошибкой R?

Насколько я понимаю, файл R состоит в том, что они автоматически создают списки ссылок для всех атрибутов в приложении Android. Следовательно, вы не можете изменить его самостоятельно.

Вы используете Eclipse для создания этого проекта? Были ли ошибки в более старых проектах перед обновлением Eclipse? Какие ссылки содержат ошибки?

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

Музыка Обезьяна
источник
У меня были проблемы с R, когда файлы AndroidManifest.xml и project.properties внутри проекта не отображали одну и ту же целевую / минимальную версию android.
Music Monkey
1

Я сталкиваюсь с этой проблемой каждый раз, когда переключаю компьютеры и пытаюсь импортировать старые проекты из файлов, переданных через USB.

Мой обходной путь - просто создать новый проект и скопировать (перетащить) файлы в среду IDE (в настоящее время использующую Netbeans) и перестроить. Это раздражает и немного хакерское решение, но оно решает проблему.

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

user5101322
источник
1

Вы можете попробовать

Верхнее меню Android Studio> Файл> Недействительные кеши / перезапуск ...

Нажмите на кнопку недействительности кеша / перезапуска, чтобы перезапустить проект.

Снова разрешите R.xxxx.xxx, если некоторая часть класса R класса фрагмента не разрешилась должным образом

затем перестройте свой проект

Надеюсь, поможет

Итан Лью
источник
0

Если вы столкнулись с этой ошибкой в ​​Android Studio:

Проверьте файл (ы) модуля Gradle -> defaultConfig -> applicationId.

Проверьте тег пакета AndroidManifest.xml -> manifest.

Проверьте объявления пакетов во всех файлах src java.

Синхронизация, очистка и восстановление с помощью Gradle.

НИКОГДА не создавайте свой собственный R-файл. R автоматически создается из ваших исходных файлов java и настроек сборки.

rask004
источник
0

У меня было: «ошибка: пакет R не существует», и я предположил, что javac не имеет доступа к R.java.
Итак, я добавил% PROJ_LOC% \ gen к исходному пути, и это сработало! SOURCEPATH =% PROJ_LOC% \ src;% PROJ_LOC% \ gen

Я не использую Android Studio или Ant (или XML).

болтать
источник
0

Если эта ошибка появилась после разрешения конфликтов слияния, может помочь простой проект Build -> Clean.

Дмитрий Смольянинов
источник
0

Только что избавился от ошибки в моем проекте. Я импортировал образец проекта, я изменил папки пакетов, но я не обновил пакет в одном из файлов java.

Наиболее вероятной причиной этой ошибки «пакет R не существует» является неправильное имя пакета в Java или файле манифеста. Убедитесь, что он правильный и синхронизированный, а затем выполните чистую сборку.

Аджай Б
источник
0

Иногда это решается, когда вы просто повторно импортируете проект в Android Studio.

Аунг Пяэ
источник
0

Неверный путь: проект "кэширует" указатели на изображения, и если вы изменили имя пути, например, отрефакторированный пакет или папки. Затем просто напишите букву R еще раз, и редактор предложит правильный путь, и все будет работать. В этом случае ваши имена файлов правильные, а содержимое, указанное в указателе R., присутствует, но путь неверен, поэтому очистка и сборка не будут работать.

Патрик Рикама-Хинненберг
источник
0

Другой случай поломки R. - Обработка аннотаций. .

Некоторая обработка может относиться к классам, расположенным в определенных папках или на определенных уровнях папок. Если вы переместите требуемые классы в другое место, вы можете получить R. как неизвестный класс.

К сожалению, указатель ошибки на эту проблему не проявляется в Android Studio.

Зон
источник
0

Нет смысла писать R.java самостоятельно, потому что он меняется при каждой сборке,

Просто не забудьте использовать R.something, например: R.raw.filename изнутри классов, значение пакета которого аналогично значению пакета внутри AndroidManifest.xml.

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

Мустафа Р. Махди
источник
0

Я забыл добавить «имя» моего «пакета» в верхней части моего класса java. Проверьте, действительно ли ваш добавлен.

ИИСУС ХРИСТОС - ЕДИНСТВЕННЫЙ ПУТЬ
источник
0

Ниже работают у меня.

  1. В файле AndroidManifest.xml проверьте, правильно ли набрано имя пакета.
  2. import com.example.appName.R; (импортировать пакет _name.R;)

Если первый шаг не сработал, попробуйте второй.

Дуля Перера
источник
-2

Решаю свою проблему:

пакет R не существует

.

Перейти к AndroidManifest.xmlфайлу и изменил minSDKVersion="17"с 19

Фазаль
источник
Позволю себе не согласиться. У вас не должно быть minSDKVersion в файле AndroidManifest.xml в соответствии с текущими стандартами. Если он у вас есть, удалите его из файла AndroidManifest.xml, это избыточный код. MinSDKVersion и targetSdkVersion должны быть определены только в файле build.gradle.
Ajay B