pakiet R nie istnieje

114

Dostaję, że przerażająca paczka Rnie istnieje, zabija mnie. Kod jest w porządku. Mam aplikacje na rynku, w których działa kod.

Teraz wykonuje proste webviewaplikacje. o.0

R.string.app_namejest mój błąd main.xmli string.xmljest w porządku. Jestem taki zdezorientowany.

Ponownie otworzyłem starszą wersję z "borrow"jakimś kodem i została zalana. R. errors.Zrobiłem czysty i nic się nie zmieniło, z wyjątkiem R.androiddodania importu na górze.

Załadowałem nawet do Netbeans i dostaję to samo. Czyszczenie nie działa. Czy mogę sam napisać R.javaplik?

Co to jest R? nie jest R. przypuszczalnie odpowiadaćR.java

Taz Ryder
źródło
1
sprawdź folder res pod kątem błędów, jeśli masz jakieś projekty dodane jako biblioteka, sprawdź je również
Sunny Kumar Aditya
1
Naciśnij Alt + Enter w linii setContentView (R.layout ..., aby dodać import.
live-love

Odpowiedzi:

128

Dla każdego, kto się z tym spotkał, dokonałem refaktoryzacji, zmieniając nazwy folderów przestrzeni nazw. Po prostu zapomniałem również edytować AndroidManifest i dlatego otrzymałem ten błąd.

Upewnij się, że to również sprawdzasz.

Mathijs Segers
źródło
1
Wygląda na to, że mam dostęp do języka R tylko z poziomu moich zajęć. Otrzymałem ten błąd, próbując uzyskać do niego dostęp z innych plików klas.
Joe Lapp
85

Aby to uprościć:

import your.app.package.R;

Oczywiście zastępując your.app.packagepakietem aplikacji.

We wszystkich klasach, które używają odwołań do zasobów R, usuń wszelkie inne za importpomocą .R, npimport android.R;

ocodo
źródło
3
Przy stosowaniu Cordova jest to właściwe rozwiązanie. Testowane z Cordova 3.0.9
Peter
1
Właściwie to mój błąd. Dzięki temu projekt Cordova może poprawnie ZBUDOWAĆ, jednak ekran powitalny nadal się NIE pojawia ... Więc to rozwiązanie w rzeczywistości nie rozwiązuje problemu.
Peter,
To właśnie musiałem zrobić podczas konwersji projektu testowego Eclipse na moduł Android Studio.
RightHandedMonkey
Jeśli używasz phonegap i dodajesz powyższą instrukcję importu do pliku wtyczek, usuń platformę i dodaj ją ponownie. W ten sposób phonegap platform remove androidiphonegap platform add android
Fawaz
54

TL; DR , jeśli pojawi się błąd „pakiet R nie istnieje”, możliwe przyczyny to

  • jakiś błąd w plikach zasobów XML
    -> napraw błędy XML
  • aktualny pakiet różni się od Rpakietu (patrz package atrybut w AndroidManifest.xml)
    -> importuj Rklasę, np. import com.example.android.R;
    -> lub użyj odpowiedniego pakietu w swoim źródle, np. package com.example.android;
    -> lub zmień atrybut pakietu w AndroidManifest.xml na <manifest xmlns:android="..." package="com.example.android" ...>, jeśli jest to właściwe
  • używane Ridentyfikatory pochodzą z zasobów systemowych
    -> nie importuj android.R, ale poprzedzaj identyfikatory naruszające zasady android.np. android.R.layout.simple_list_item_2
    możesz android.Roczywiście importować zamiast poprzedzać identyfikatory, ale wtedy nie możesz już importować Rklasy aplikacji i musisz poprzedzić identyfikatory aplikacji, np. com.example.android.R.id.main_menu.

R Klasa jest generowana automatycznie z zasobów aplikacji. Zawiera ids dla tych zasobów i jest zawarty w pakiecie wymienionym w <manifest> tagu w odpowiednim AndroidManifest.xmlpliku.

Jeśli nie ma błędów w plikach XML zasobów, R.javaźródło zostanie wygenerowane w podkatalogu pakietu poniżej gen/i skompilowane.


W pakiecie znajduje się inna Rklasa android. Ta android.Rklasa zawiera kilka zagnieżdżonych klas, które z kolei zawierają ids i inne wartości dla zasobów systemowych .


Aby użyć klasy w Javie, musisz nazwać klasę całym pakietem, np

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

lub zaimportuj klasę, a następnie użyj jej bez pakietu

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

Możesz również użyć klasy bez nazywania pakietu, jeśli zarówno aktualna klasa, jak i używana klasa znajdują się w tym samym pakiecie, np.

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}
Olaf Dietsche
źródło
1
W moim przypadku problemem była ścieżka klasy „com.android.tools.build:gradle:3.3.0”. Zmieniłem go na classpath „com.android.tools.build:gradle:3.2.1” i rozwiązałem problem.
Mohit Rajput
25

Nigdy, przenigdy nie próbuj samodzielnie pisać klasy R!

Czy zaimportowałeś właściwą klasę R w swoich plikach?

Robić

import android.R;

zamiast

import com.example.R;

wydaje się być problemem dla wielu ludzi. Po sprzątaniu i budowaniu moje zajęcia czasami importują niewłaściwy.

J. Maes
źródło
3
Ale nie rozumiem, że nie było R, kiedy początkowo kodowałem i stosowałem się do programu.
Taz Ryder
12

Jeśli programujesz w Android Studio i zmieniono nazwę pakietu, powinieneś zmienić nazwę pakietu w manifeście Androida i pliku gradle aplikacji.

 applicationId "change here your package name"

iw pliku manifestu

 package="change here your package name"
Milon
źródło
Tak. Na przykład nieco inna wielkość liter w nazwie aplikacji.
Steve White
9

R.java jest plikiem generowanym automatycznie, zwykle nie jest kompilowany, jeśli występują błędy w pliku xml.

Nie Nie możesz napisać własnego pliku R.java, musi on zostać wygenerowany przez kompilator zasobów.

Sprawdź, czy we wszystkich plikach xml nie ma błędów.

nandeesh
źródło
1
Jakie błędy i jak powinien je rozpoznać początkujący?
user1725145
6

Klasa R to kod Java generowany automatycznie z plików XML (układ interfejsu użytkownika, łańcuchy internacjonalizacji itp.) Jeśli kod działał wcześniej (tak się wydaje), musisz powiedzieć swojemu IDE, aby jakoś ponownie wygenerował te pliki :

  • w IntelliJ wybierz Narzędzia> Android> Generuj źródła dla <project>
  • (Jeśli znasz drogę w innym IDE, możesz edytować tę odpowiedź!)
DomQ
źródło
To była odpowiedź, którą szukałem. Dzięki… +1
Adhikari Bishwash,
5

Przypuszczam, że kiedyś działało, ale teraz nie ...

Może się to zdarzyć, jeśli zmienisz nazwę PAKIETU w pliku MANIFESTU

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

Jeśli chcesz zmienić nazwę pakietu

  1. Zmień nazwę pakietu ręcznie w pliku manifestu.
  2. Kliknij swoją klasę R.java i naciśnij klawisz F6. Umożliwi to przeniesienie klasy do innego pakietu, a wszystkie odniesienia do tej klasy zostaną zaktualizowane.
Emanuele Greco
źródło
Jesteś bogiem! Zmieniłem projekt z com.example.rickydam.txtbooksna com.txtbooks.txtbooks, tworząc nowy projekt i przeniosłem wszystko do nowego projektu, ale nie mogłem znaleźć R.Próbowałem unieważnić pamięci podręczne, synchronizować z gradle, czyścić projekt, odbudowywać projekt, ponownie instalować narzędzia SDK ... Nic nie działało! Ale twoje rozwiązanie rozwiązało mój problem! Dzięki jeszcze raz! Programuj dalej!
Ricky Dam
4

Właśnie napotkałem ten błąd podczas używania Bazela do tworzenia aplikacji na Androida:

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.

Upewnij się, że android_library/ android_binaryużywa atrybutu AndroidManifest.xmlz poprawnym package=atrybutem, a jeśli używasz custom_packageatrybutu w android_librarylub android_binary, upewnij się, że jest on poprawnie zapisany.

Jin
źródło
3

Usuń import android.R; ze wszystkich plików ... po wyczyszczeniu projektu i skompilowaniu projektu ... wygeneruje

satynowy
źródło
3

Przykład: Mój pakiet to com.example.mypc.f01 , aby naprawić błąd, dodaj poniższy wiersz do działania:

import com.example.mypc.f01.R;

O Thạnh Ldt
źródło
3

Poniżej znajduje się kilka technik, których możesz użyć, aby usunąć ten błąd: -

  1. Wyczyść swój projekt, Buidl-> wyczyść projekt
  2. Przebuduj projekt, Zbuduj -> Przebuduj projekt
  3. Otwórz manifest i sprawdź, czy brakuje jakiegoś zasobu
  4. Wpisz układ do konkretnego identyfikatora, jeśli go brakuje, dodaj go
  5. Jeśli powyższe kroki nie zadziałały, uruchom ponownie Android Studio z unieważnieniem pamięci podręcznej
Budhdi Sharma
źródło
2

W moim przypadku zdałem sobie sprawę, że tworzę wiele pakietów w projekcie. W ramach manifestu Androida stwierdziłem, że nazwa dostawcy niepoprawnie zawierała wartość MyContentProvider zamiast .provider.MyContentProvider. Mój główny pakiet (z interfejsem użytkownika) to co.companyname.database.provider zamiast co.companyname.database.

Następnie kliknąłem prawym przyciskiem myszy instrukcje importu dla klasy, której dotyczy problem, i poprosiłem Android Studio (0.8.6) o zoptymalizowanie moich instrukcji importu. Zauważyłem również, że jeśli szukasz .R w pasku wyszukiwania AS w prawym górnym rogu IDE, możesz znaleźć automatycznie wygenerowany plik R.java, który jest częścią twojego pakietu. W tym momencie nie musisz niczego zmieniać. Studio powinno naprawić projekt po poprawieniu pliku manifestu systemu Android i ponownym skompilowaniu.

Innym elementem jest to, że w jednej z klas korzystałem z metody toString (). Length () do oceny łańcucha, ale zamieniłem je na TextUtils.IsEmpty (stringVal); Nie mogę wymyślić nic innego, co zrobiłem, aby rozwiązać problem.

Mam nadzieję, że to komuś pomoże.

Uwaga - wszystko to dotyczy AS 0.8.6

PS

R.java jest generowany automatycznie, więc przeczytaj nagłówek: / * AUTO-GENERATED FILE. NIE MODYFIKUJ. * * Ta klasa została automatycznie wygenerowana przez narzędzie * aapt na podstawie znalezionych danych o zasobach. * Nie należy go modyfikować ręcznie. * /

Tommie C.
źródło
2

Kiedy tego doświadczyłem, stworzyłem nowy projekt i skopiowałem pliki z mojego starego projektu do nowego.

  1. Rozpocznij nowy projekt
  2. Dodaj stare pliki do nowego projektu (skopiuj i kliknij prawym przyciskiem myszy Układ, elementy do rysowania, nazwa pakietu com, ...), aby wkleić moje stare pliki projektów

Ja jednak nadal miał ten sam problem: R does not exist. Potem zdałem sobie sprawę, że skopiowałem i wkleiłem Manifest z mojego notatnika do manifestów Android Studio i nie zmieniłem nazwy pakietu w pliku manifestu.

Dlatego po zmianie nazwy pakietu w manifeście na nową nazwę projektu nowy projekt, który utworzyłem, działał dobrze.

Jesús Rojo
źródło
1

Jakie pliki importujesz do plików, w których pojawia się błąd R?

Rozumiem, że plik R jest taki, że są to automatycznie generowane listy referencyjne do wszystkich atrybutów w aplikacji na Androida. Dlatego nie możesz tego zmienić samodzielnie.

Czy używasz Eclipse do tworzenia tego projektu? Czy starsze projekty otrzymywały te błędy przed aktualizacją Eclipse? W jakich plikach referencyjnych pojawiają się błędy?

Sprawdź, czy nie zaimportowałeś innego pliku R z innego skopiowanego kodu w innej aplikacji.

Music Monkey
źródło
Mam problemy z językiem R, gdy plik AndroidManifest.xml i plik project.properties w projekcie nie wyświetlają tej samej docelowej / minimalnej wersji Androida.
Music Monkey
1

Napotykam ten problem za każdym razem, gdy przełączam komputer i próbuję zaimportować stare projekty z plików przesłanych przez USB.

Moim obejściem jest po prostu utworzenie nowego projektu i skopiowanie (przeciągnięcie) plików do IDE (obecnie używającego Netbeans) i odbudowanie. Jest to irytujące i trochę hakerskie rozwiązanie, ale rozwiązuje problem.

Jeśli tak się stanie, w najgorszym przypadku będziesz musiał wykonać kopię zapasową plików, usunąć projekt i po prostu przeciągnąć tam pliki i ponownie skompilować. Miejmy nadzieję, że do tego nie dojdzie, ale to byłaby twoja opcja nuklearna.

user5101322
źródło
1

Możesz spróbować

Górne menu Android Studio> Plik> Unieważnij pamięć podręczną / uruchom ponownie ...

Kliknij przycisk unieważnij pamięć podręczną / uruchom ponownie, aby ponownie uruchomić projekt

Rozwiąż ponownie R.xxxx.xxx, jeśli niektóre fragmenty klasy R nie zostały poprawnie rozwiązane

następnie odbuduj swój projekt

Mam nadzieję, że to pomoże

Ethan Liew
źródło
0

Jeśli napotkasz ten błąd w Android Studio:

Sprawdź plik (i) modułu Gradle -> defaultConfig -> ustawienie applicationId.

Sprawdź tag AndroidManifest.xml -> manifest pakietu.

Sprawdź deklaracje pakietów we wszystkich plikach java src.

Synchronizuj, wyczyść, a następnie odbuduj za pomocą Gradle.

NIGDY nie twórz własnego pliku R. R jest generowany automatycznie na podstawie źródłowych plików java i ustawień kompilacji.

rask004
źródło
0

Miałem: „błąd: pakiet R nie istnieje” i założyłem, że javac nie ma dostępu do R.java.
Więc dodałem% PROJ_LOC% \ gen do sourcepath i zadziałało! SOURCEPATH =% PROJ_LOC% \ src;% PROJ_LOC% \ gen

Nie używam Android Studio ani Ant (lub XML).

czat
źródło
0

Jeśli ten błąd pojawił się po rozwiązaniu konfliktów scalania, może pomóc prosta kompilacja -> Wyczyść projekt.

Dmitry Smolyaninov
źródło
0

Właśnie pozbyłem się błędu w moim projekcie. Zaimportowałem przykładowy projekt, zmieniłem foldery pakietów, ale nie zaktualizowałem pakietu w jednym z plików java.

Najbardziej prawdopodobną przyczyną tego błędu „pakiet R nie istnieje” jest nieprawidłowa nazwa pakietu w języku Java lub pliku manifestu. Upewnij się, że jest poprawny i zsynchronizowany, a następnie wykonaj czystą kompilację.

Ajay B
źródło
0

Czasami problem zostaje rozwiązany, gdy ponownie zaimportujesz projekt do Android Studio.

Aung Pyae
źródło
0

Nieprawidłowa ścieżka: Projekt „kasuje” wskaźniki do obrazów i jeśli zmieniono nazwę ścieżki, na przykład pakiet lub foldery Refactored. Następnie po prostu napisz ponownie literę R, a redaktor zasugeruje właściwą ścieżkę i zadziała. W tym przypadku nazwy plików są poprawne, a zawartość, do której odnosi się wskaźnik R., jest obecna, ale ścieżka jest nieprawidłowa, więc czyszczenie i kompilacja nie będą działać.

Patrik Rikama-Hinnenberg
źródło
0

Innym przypadkiem złamania R. jest przetwarzanie adnotacji .

Niektóre procesy przetwarzania mogą odnosić się do klas znajdujących się w określonych folderach lub poziomach folderów. Jeśli przeniesiesz wymagane klasy w inne miejsce, możesz otrzymać R. jako nieznaną klasę.

Niestety wskaźnik błędu wskazujący na ten problem nie jest widoczny w Android Studio.

Zon
źródło
0

Nie ma korzyści z samodzielnego pisania R.java, ponieważ jest on zmieniany przy każdej kompilacji,

Pamiętaj tylko, aby użyć R. czegoś, na przykład: R.raw.filename z wewnątrz klas, które mają wartość pakietu podobną do wartości pakietu w pliku AndroidManifest.xml

ponieważ identyfikatory zasobów R. są zdefiniowane dla bieżącej aplikacji lub biblioteki i wszystkie są sprawdzane, jeśli istnieją w czasie kompilacji, więc nie ma sensu zezwalać na dostęp do nich z „kodu”, który nie jest przeznaczony dla bieżącej aplikacji lub biblioteki i może być używane w innych miejscach.

Mustafa R. Mahdi
źródło
0

Zapomniałem dodać „nazwę” mojego „pakietu” na początku mojej klasy java. Sprawdź, czy Twój został faktycznie dodany.

JEZUS CHRYSTUS JEST JEDYNĄ DROGĄ T.
źródło
0

Poniżej pracują dla mnie.

  1. W pliku AndroidManifest.xml sprawdź, czy nazwa pakietu jest poprawnie wpisana.
  2. import com.example.appName.R; (importuj pakiet _nazwa.R;)

Jeśli pierwszy krok nie działa, spróbuj drugiego.

Dulya Perera
źródło
-2

Rozwiązuję swój problem:

pakiet R nie istnieje

.

Idź do AndroidManifest.xmlpliku i zmieniono minSDKVersion="17"z 19

Fazal
źródło
Pozwolę sobie być innego zdania. Nie powinieneś mieć minSDKVersion w pliku AndroidManifest.xml zgodnie z obecnymi standardami. Jeśli go masz, usuń go z pliku AndroidManifest.xml, jest to nadmiarowy kod. Wersja minSDKVersion i targetSdkVersion powinny być zdefiniowane tylko w pliku build.gradle.
Ajay B