пакет 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, не стесняйтесь редактировать этот ответ!)

Это был ответ, который я искал. Спасибо .. +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;


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) и перестроить. Это раздражает и немного хакерское решение, но оно решает проблему.

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


1

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

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

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

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

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

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


0

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

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

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

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

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

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


0

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

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



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

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

  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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.