пакет R не існує


114

Я отримую жахливий пакет Rне існує, це мене вбиває. Код прекрасний. У мене є додатки на ринку, де працює цей код.

Тепер це ефективні webviewпрограми. o.0

R.string.app_nameце помилка моя main.xmlі string.xmlце добре. Я так розгублений.

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

Я навіть завантажився в Netbeans і отримую те саме. Чисто не працює. Чи можу я сам написати R.javaфайл?

Що це за Rріч? ні R. повинен відповідатиR.java


1
перевіряйте папку res на наявність помилок, якщо у вас є якісь проекти, додані як бібліотека, також перевіряйте їх
Sunny Kumar Aditya

1
Натисніть Alt + Enter на setContentView (R.layout ... рядок, щоб додати імпорт.
live-love

Відповіді:


127

Для всіх, хто зіткнувся з цим, я відремонтувався, перейменувавши папки простору імен. Я просто забув також редагувати AndroidManifest, і тому я отримав цю помилку.

Переконайтесь, що ви також це перевірили.


1
Здається, що я можу отримати доступ до R лише з класів своєї діяльності. Я отримував цю помилку при спробі отримати доступ до неї з інших файлів класу.
Джо Лапп

84

Просто, щоб зробити це просто:

import your.app.package.R;

Звичайно, замінивши your.app.packageпакетом додатків.

У всіх класах, які використовують посилання R на ресурси, видаліть будь-який інший за importдопомогою .R, тобтоimport android.R;


3
Використовуючи Кордову, це правильне рішення. Тестували з Кордовою 3.0.9
Пітер

1
Власне, моя помилка. Це дозволяє проекту Cordova побудувати належним чином, проте екран Splash все ще НЕ відображається ... Отже, це рішення насправді не вирішує проблему.
Пітер

Це мені потрібно було зробити при перетворенні тестового проекту Eclipse в модуль Android Studio.
RightHandedMonkey

Якщо ви використовуєте phonegap і додаєте вище заявки на імпорт всередині свого файла плагінів, тоді обов’язково вийміть платформу та додайте ще раз. Ось так phonegap platform remove androidіphonegap platform add android
Fawaz

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'. Я змінив його на classpath 'com.android.tools.build:gradle:3.2.1' і проблему вирішено.
Мохіт Раджпут

25

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

Ви імпортували потрібний клас R у свої файли?

Робимо

import android.R;

замість

import com.example.R;

здається, це проблема для багатьох людей. Після прибирання та будівництва мої заняття іноді імпортують неправильний.


3
Але я не розумію, що R речі там не було, коли я спочатку кодував і виконував програму.
Таз Райдер

12

якщо ви розвиваєтеся в андроїд-студії та реконструювали назву пакета, то вам слід змінити ім’я пакета в маніфесті Android та файлі gradle програми

 applicationId "change here your package name"

і у файлі маніфесту

 package="change here your package name"

Так. Наприклад, трохи інша літера з назвою програми.
Стів Вайт

9

R.java - це автогенерований файл, він, як правило, не компілюється, якщо у вас є помилки у файлі xml.

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

Перевірте наявність помилок у всіх своїх XML-файлах.


1
Які помилки і як їх повинен помітити новачок?
користувач1725145

6

Клас R - це код, який автоматично генерується з ваших XML-файлів (макет інтерфейсу, рядки інтернаціоналізації тощо). Якщо раніше раніше працював код (як здається), вам потрібно повідомити свій IDE, щоб якось регенерувати ці файли. :

  • у IntelliJ виберіть Інструменти> Android> Створення джерел для <проекту>
  • (Якщо ви знаєте шлях до іншої IDE, сміливо відредагуйте цю відповідь!)

Це був анс, який я шукав. Спасибі .. +1
Adhikari Bishwash

5

Я вважаю, що раніше це працювало, але зараз це не так.

Це може статися, якщо ви зміните ПАКЕТНЕ ім’я у вашому файлі MANIFEST

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

Якщо ви хочете змінити назву пакета

  1. Змініть назву пакета вручну у файлі маніфесту.
  2. Клацніть на ваш клас R.java та натисніть F6. Це дозволить вам перенести клас в інший пакет, і всі посилання на цей клас будуть оновлені.

Ти бог! Я змінював свій проект com.example.rickydam.txtbooksна com.txtbooks.txtbooksна, роблячи новий проект, і все перейшов на новий проект, але він не міг знайти R. Я спробував визначити недійсні кеші, синхронізувати з gradle, очистити проект, відновити проект, перевстановити SDK-інструменти ... Нічого не працювало! Але ваше рішення виправило мою проблему! Знову дякую! Продовжуйте кодування!
Рикі Дам

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 , щоб виправити помилку, ви додаєте рядок нижче до Діяльності:

import com.example.mypc.f01.R;


3

Нижче наведено кілька технічних засобів, які можна використовувати для усунення цієї помилки: -

  1. Очистіть проект, Buidl-> Очистіть проект
  2. Перебудувати проект, побудувати -> відновити проект
  3. Відкрийте маніфест і перевірте, чи немає ресурсів
  4. Макет реєстрації до конкретного ідентифікатора, якщо його немає, додайте його
  5. Якщо вищезазначені кроки не спрацювали, перезавантажте android studio з вимкненням кешу

2

У моєму випадку я зрозумів, що створюю декілька пакетів у проекті. У межах Android Manifest я виявив, що ім'я постачальника неправильно містить значення MyContentProvider замість .provider.MyContentProvider. Основним моїм пакетом (з інтерфейсом користувача) був co.companyname.database.provider замість co.companyname.database.

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

Ще одним пунктом є те, що в одному класі я використовував toString (). Length () для оцінки рядка, але поміняв їх на TextUtils.IsEmpty (stringVal); Не можу придумати нічого іншого, що я зробив, щоб вирішити проблему.

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

NB - Все це з AS 0.8.6

PS

R.java генерується автоматично, тому прочитайте заголовок: / * АВТОМАТИЧНИЙ ФАЙЛ. НЕ МОДИТИ. * * Цей клас автоматично генерувався інструментом * aapt із знайдених ним ресурсів. Це * не слід змінювати вручну. * /


2

Коли я пережив це, я створив новий проект і скопіював файли зі свого старого проекту в новий.

  1. Почніть новий проект
  2. Додайте старі файли до нового проекту (скопіюйте та клацніть правою кнопкою миші на макеті, малюнки, com.packagename, ...), щоб вставити мої старі файли проектів

Тим НЕ менше, я все ще була та ж проблема: R does not exist. Потім я зрозумів, що скопіював і вставив Manifest зі свого блокнота в маніфести Android Studio, і не змінив назву пакета у файл маніфесту.

Тому, як тільки я змінив назву пакета в маніфесті на нову назву проекту, новий проект, який я створив, спрацював чудово.


1

Які файли ви імпортуєте у файли, які отримують помилку R?

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

Ви використовуєте Eclipse для створення цього проекту? Чи старіші проекти отримували ці помилки перед оновленням Eclipse? Що таке посилання, які отримують помилки?

Переконайтеся, що ви не імпортували інший файл R з іншого скопійованого коду в інший додаток.


У мене виникли проблеми з R, коли файл AndroidManifest.xml та файл project.properties в рамках проекту не відображають однакову цільову / мінімальну версію Android.
Музична мавпа

1

Я стикаюся з цією проблемою щоразу, коли перемикаю комп'ютери і намагаюся імпортувати старі проекти з файлів, переданих через USB.

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

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


1

Ви можете спробувати

Верхнє меню Android Studio> Файл> Недійсні кеші / перезавантаження ...

Натисніть на недійсний кеш / кнопку перезапуску, щоб перезапустити проект

Знову вирішіть R.xxxx.xxx ще раз, якщо частина класу R фрагмента R неправильно розв’язана

потім відновіть проект

Сподіваюся, це допомагає


0

Якщо ви зіткнулися з цією помилкою в Android Studio:

Перевірте файли модулів Gradle -> defaultConfig -> applicationId.

Перевірте тег пакета AndroidManifest.xml ->.

Перевірте декларації пакета у всіх файлах src java.

Синхронізуйте, очистіть, а потім відновіть за допомогою Gradle.

НІКОЛИ не створюйте власний файл R. R автоматично генерується з вихідних файлів Java та налаштовує настройки.


0

У мене було: "помилка: пакет R не існує" і припускав, що javac не мав доступу до R.java.
Тому я додав% PROJ_LOC% \ gen до sourcepath, і це спрацювало! SOURCEPATH =% PROJ_LOC% \ src;% PROJ_LOC% \ gen

Я не використовую Android Studio або Ant (або XML).


0

Якщо ця помилка з’явилася після вирішення конфліктів злиття, простий проект Build -> Clean Project може допомогти.


0

Просто позбувся помилки в моєму проекті. Я імпортував зразок проекту, я змінив папки пакунків, але не оновив пакунок в одному з файлів Java.

Найімовірнішою причиною цієї помилки "пакет R не існує" є те, що ім'я пакету в Java або маніфестному файлі невірно. Переконайтесь, що це правильно та синхронізовано, а потім зробіть чисту конструкцію.


0

Іноді це вирішується, коли ви просто імпортуєте проект в Android Studio.


0

Неправильний шлях: Проект "вказує" вказівники на зображення, і якщо ви внесли зміни до шляху, наприклад, Refactored пакет або папки. Потім просто просто напишіть R-лист ще раз, і редактор підказує правильний шлях, і він спрацює. У цьому випадку ваші імена файлів є правильними, і вміст, на який посилається в покажчику R., присутній, але шлях неправильний, тому очищення та складання не працюватимуть.


0

Ще один випадок поломки Р. - обробка анотацій .

Деяка обробка може стосуватися класів, розташованих у певних папках або рівнях папок. Якщо ви перемістите потрібні класи в інше місце, ви можете отримати R. як невідомий клас.

На жаль, покажчик помилок на цю проблему не очевидний в Android Studio.


0

Немає користі писати R.java самостійно, оскільки це змінюється на кожному складі,

Просто пам’ятайте, щоб використовувати R.something, наприклад: R.raw.filename з класів всередині класу, яке має значення пакету, подібне до значення пакета всередині AndroidManifest.xml

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



-2

Я вирішую свою проблему:

пакет R не існує

.

Перейшов у AndroidManifest.xmlфайл і змінився minSDKVersion="17"з 19


Дозволю собі не погодитися. У файлі AndroidManifest.xml не повинно бути minSDKVersion відповідно до чинних стандартів. Якщо у вас є, то видаліть його з файлу AndroidManifest.xml, це зайвий код. MinSDKVersion & targetSdkVersion слід визначати лише у файлі build.gradle.
Аджай Б
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.