Programowanie dla Androida w Eclipse: R.java nie regeneruje się

309

Dowiedziałem się, że moja R.java nigdy nie jest aktualizowana, więc nie zawiera informacji o moich nowych zasobach, więc postanowiłem ją usunąć i pomyślałem, że Eclipse wygeneruje nowy. Ale tak się nie stało i nie mam teraz R.javy. Jak mogę je zregenerować?

Korzystam z systemu Windows 7.

Z jednego z komentarzy: „Doing Project -> Clean jest tym, co spowodowało problem. Czyszczenie usuwa R.java ... iz jakiegokolwiek powodu wtyczka nie regeneruje pliku.”

Peter Mortensen
źródło
moje rozwiązanie, gdy czyszczenie nie działało: musiałem pobrać Narzędzia kompilacji w menedżerze SDK, a następnie ponownie uruchomić system. Mam ADT 22.3.0.
Moradnejad,

Odpowiedzi:

177

Ta strona sugeruje:

jeśli uruchomisz czysty projekt, powinien ponownie wygenerować wszystkie wygenerowane pliki Java, a mianowicie R.

...i...

W Eclipse, w menu Projekt, jest opcja budowana automatycznie. Pomogłoby to zbudować plik R.java za każdym razem, gdy wprowadzane są modyfikacje. Opcja Wyczyść ... jest również dostępna w ramach projektu.

Ta strona sugeruje inne rozwiązanie.

aioobe
źródło
1
Kto by pomyślał, dzięki chłopaki +1 tutaj miałem problem z moim układem, więc R.Java nie był tworzony. Świetne głowy! Twoje zdrowie.
101
Doing Project-> Clean jest tym, co spowodowało problem. Czyszczenie usuwa R.java ... i z jakiegokolwiek powodu wtyczka nie regeneruje pliku.
Cerin,
7
Miałem to okienko wyskakujące, gdy łączyłem się z biblioteką wymagającą innej wersji interfejsu API obsługi Androida niż zainstalowałem. Zależności nie działały i mój R nie został wygenerowany po tym. Jak powiedzieli inni, pojawia się w dzienniku błędów, więc sprawdź tam.
mikebabcock
1
W moim przypadku czyszczenie projektu po prostu usuwa R.java , zamiast go regenerować. stackoverflow.com/questions/13065425/…
RobinJ,
96
R.java nie regeneruje się, jeśli masz jakieś błędy w katalogu res. Usunięte błędy -> rozwiązany problem w moim przypadku :)
JavaRunner
300

Zauważyłem, że tak się dzieje ze zepsutym układem i wszystko się wysadza. Zrelaksuj się, to jest jak ten stary błąd, kiedy nauczyłeś się programowania C, w którym zapominasz jednego średnika i generuje on sto błędów. Wiele paniki, naciśnij wszystkie przyciski, i pogarsza.

Rozwiązanie

  • Upewnij się, że nic nie R.prowadzi do linków. Napraw wszystkie błędy w plikach XML . Jeśli coś w pakietach ADK jest uszkodzone, Rnie zostanie zregenerowane.
  • Jeśli coś trafiłeś i utworzyłeś import android.Rw swojej działalności, usuń to .
  • Uruchom projekt -> Wyczyść . Spowoduje to usunięcie i ponowne wygenerowanie R i BuildConfig.
  • Upewnij się, że zaznaczono opcję Projekt -> Kompiluj automatycznie . Jeśli nie, zbuduj go ręcznie za pomocą Menu -> Project -> Build Project.
  • Poczekaj kilka sekund, aż błędy znikną.
  • Jeśli to nie działa, usuń wszystko z folderu / gen /
  • Jeśli nadal nie działa, spróbuj kliknąć projekt prawym przyciskiem myszy -> Narzędzia Android -> Napraw właściwości projektu .
  • Sprawdź pliki * .properties (w folderze głównym folderu aplikacji) i upewnij się, że zawarte tam łącza nie są uszkodzone.
  • Kliknij prawym przyciskiem myszy swój projekt> właściwości> Android . Spójrz na sekcje Cel kompilacji projektu i Biblioteka po prawej stronie strony. Twój cel kompilacji powinien być zgodny z celem w pliku AndroidManifest.xml. Jeśli więc ustawiony jest na 17 w AndroidManifest, upewnij się, że Nazwą docelową jest Android 4.2. Jeśli twoja biblioteka ma X pod odnośnikiem, usuń i ponownie dodaj bibliotekę, aż pojawi się zielony haczyk. Może się tak zdarzyć, jeśli przeniesiesz kilka plików i folderów.

Co zrobić, gdy R nie regeneruje się

Zwykle dzieje się tak, gdy masz uszkodzony plik XML.

  • Sprawdź błędy w swoich plikach XML, głównie w /res/ folderze
  • Typowe miejsca to /layout/ a /values/zwłaszcza jeśli niedawno zmieniłeś jedno z nich
  • Czek AndroidManifest.xml . Uważam, że często zmieniam ciąg i zapominam zmienić nazwę ciąguAndroidManifest.xml .
  • Sprawdź, czy Android SDK Build-toolsjest zainstalowany. Okno -> Menedżer zestawu SDK systemu Android -> Narzędzia -> Narzędzia do kompilacji zestawu SDK systemu Android
  • Upewnij się, że podczas aktualizacji aktualizujesz Android SDK Toolsrównież Android SDK Platform-toolsiAndroid ADK Build-tools . Kompilacja kończy się po cichu, jeśli się nie zgadza.
  • Jeśli nie możesz znaleźć problemu, kliknij prawym przyciskiem myszy / gen / -> Przywróć z lokalnej historii ... -> zaznacz R.java -> kliknij Przywróć . Nawet jeśli nie rozwiąże problemu, usunie dodatkowe błędy, aby ułatwić znalezienie problemu.
Muz
źródło
21
to powinna być najlepsza odpowiedź!
john.k.doe
6
Rzeczywiście, uświadomiłem sobie, że moje środowisko wciąż potrzebuje aktualizacji narzędzi.
woodleg.as
11
Window-> Android SDK Manager-> Narzędzia-> Android SDK Build-tools to dla mnie rozwiązanie, głosowałem
1
Przeczytałem dziesiątki odpowiedzi i tylko ta wspomniała sprawdzanie narzędzi do kompilacji SDK. Ślepo pozwalam eclipse pobierać i instalować wszystkie moje narzędzia dla Androida, gdy jest to możliwe. Zupełnie tęsknię za tą częścią.
Justin Aquadro
1
Sprawdź konsolę, może dać ci szczegółowy błąd, który należy naprawić, a następnie możesz zbudować. To pomogło w moim przypadku
david72
40

Miałem ten sam problem. Kiedy to sprawdziłem, okazało się, że nazwa zasobu XML w układzie nie ma właściwej konwencji nazewnictwa. Miał kilka wielkich liter. Zmieniłem więc nazwę, aby wszystkie litery były małe i magia działała.

Amit Kumar
źródło
2
tx ... głupie, że myślę, że mogę używać wielkich liter w nazwach mojego układu
Kevin
też dla mnie działało: konsola zgłosiła to: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Niepoprawna nazwa pliku: musi zawierać tylko [a-z0-9_.]
sami
1
Dzięki, to był mój problem. Miałem plik .xml w folderze układu z kapitałem, a cały mój plik R.java był zaginiony / nie generowałby się z tego powodu. Jedynym sposobem, aby się tego dowiedzieć, było uświadomienie sobie, że konwencja nazewnictwa nie dopuszcza kapitału; nie wygenerowano błędów.
Lemmings19
1
Podczas nazywania plików zasobów lub atrybutów, spróbuj nazwać je tak, jakbyś nazwał zmienną w Javie. R.class umieszcza zasoby tj. id, dające się wyciągnąć, nazwy plików xml z publiczną statyczną stałą stałą, więc umieszczenie „-”, „znak specjalny” doprowadziłoby do zatrzymania generowania R, ponieważ symbole te mogą mieć inne środki arytmetyczne.
IronBlossom
1
Tak, to był dla mnie problem. Plik w moim res / xml odnosi się do pliku układu, który nie istnieje, i najwyraźniej powoduje to, że R.java nie jest generowany, więc jeśli uruchomię Clean, spowoduje to brakujący R.java, co spowoduje setki błędów importu ...
Cerin,
28

Jednym z powodów, dla których R.class może nagle zniknąć, są błędy w plikach XML. Na przykład, gdy dodajesz plik XML z dużymi literami w nazwie np. MyCoolLayout.xml, co jest niedozwolone. Lub gdy masz odniesienia, które nie wskazują na istniejące pliki itp.

Paweł
źródło
17

W Eclipse wystarczy użyć Project -> clean, aby wyczyścić projekt. R.java zostanie automatycznie (ponownie) utworzona.

Jeśli z jakiegoś powodu to nie działa: Upewnij się, że pliki layout.xml nie zawierają błędów. Zaćmienie wydaje się być tutaj trochę błędne: czasami nie oznacza to błędów w XML-ie ani eksploratorze pakietów. W takim przypadku: spójrz na widok „konsoli” lub „problemów” po użyciu „czystego”. Wszystkie błędy powinny tam zostać wyświetlone. Napraw je i wykonaj ponownie czyste.

UWAGA: NIE jest konieczne naprawianie błędów, które pojawiają się z powodu brakującego pliku R. Po prostu napraw pliki XML i inne błędy projektu i używaj czystego!

masi
źródło
Upewnij się, że konwencje nazewnictwa plików zasobów są prawidłowe. @Masi dzięki za wskazówkę dotyczącą „konsoli” pod kątem błędów po czyszczeniu. to mi pomogło.
Bharath Booshan
10

Szybka naprawa:

Nazwa pakietu w manifeście musi być taka sama jak nazwa w /srcfolderze/gen pakiet folderów zostanie automatycznie odtworzony.

Szczegółowa obserwacja:

Obserwuj nazwę pakietu w /genfolderze. W moim przypadku było inaczej niż w/src folderze.

Pakiet wymieniony w manifeście to pakiet /gen .

Próbowałem również dodać do /srcfolderu pakiet z nazwą folderu, aby /genzobaczyć, co by się stało, ale to nie rozwiązało problemu. Następnie przystąpiłem do usunięcia nazwy pakietu, która nie była taka sama jak nazwa pakietu/src folderu. Ten pakiet o nazwie, która nie odpowiada/src folderowi, został ponownie utworzony, gdy tylko go usunąłem.

Ponieważ odwołanie do pakietu w manifeście odpowiadało temu, który był bezsensownie odtwarzany i który nie odpowiadał pakietowi w /srcfolderze, spowodowało to konieczność zmiany nazwy package = "oldPackage"na package = "srcFolderPackage".

androidWorkerTheEighth
źródło
9

Miałem ten sam problem i w końcu znalazłem problem: W strings.xml nie zachowałem linii <string name="app_name">program-name</string> domyślnie która jest obecna podczas tworzenia nowego projektu na Androida. Myślałem, że był używany tylko w programie HelloWord, który jest programem oryginalnym.

Jednak plik AndroidManifest.xml odnosi się do tej wartości, stąd:

=> Błąd kompilacji;
=> R.java nie jest aktualizowana;
=> ID nie są rozpoznawane ...

Glaux
źródło
wiersz w pliku string.xml to „<nazwa ciągu =„ nazwa_aplikacji ”> nazwa programu </entry>”. Przepraszam, miałem problem ze swoim postem.
Glaux,
9

Android dodał w narzędziu kompilacji SDK narzędzie ADT 22 do mechanizmu budowania. Musisz tylko wykonać następujące kroki.

  1. Zaktualizuj narzędzie Android SDK
  2. Zaktualizuj narzędzie platformy Android SDK
  3. Zaktualizuj narzędzie do kompilacji zestawu SDK systemu Android
  4. Dodaj ścieżkę narzędzia do kompilacji do zmiennej ścieżki. (ścieżka do ---- YOUR DIRECTORY-PATH \ android-sdk \ build-tools)

To rozwiąże problem.

Amol
źródło
Moja odpowiedź jest jedyną, która dotyczy pytania. wciąż mam tylko 3 głosy w górę. dziwne!
Mr.India
8

Jeśli twoja R.java nie jest generowana, jednym z rozwiązań jest usunięcie pliku układu o nazwie „blabla.out.xml”.

Po usunięciu tego pliku spróbuj wyczyścić projekt z menu Projekt -> Wyczyść .

Shashank
źródło
7

Jako uogólnienie odpowiedzi Glaux, jeśli masz jakieś błędy w reskatalogu, R.java może nie wygenerować - nawet jeśli wyczyścisz i przebudujesz. Najpierw rozwiąż te błędy.

Na przykład: po dodaniu pliku obrazu powiedz „myimage-2.jpg” system uzna to za błąd, ponieważ nazwy plików są ograniczone do wartości alfanumerycznych. Odśwież katalog w katalogu „res” po dodaniu jakichkolwiek plików i obserwuj dane wyjściowe w oknie konsoli pod kątem ostrzeżeń o nazwach plików.

Abel
źródło
Dokładnie! Zdarza mi się to raz na jakiś czas, gdy zmieniam nazwę ciągów w moim strings.xml. To może tworzyć wiszące odniesienia w moich plikach układu. I TO hamuje produkcję R.java. Szkoda, że ​​nie ma możliwości refaktoryzacji identyfikatorów XML.
Scott Biggs,
6

Jeśli twój system operacyjny to Ubuntu, mogę podać kilka sugestii:

  1. Zainstaluj lub zaktualizuj ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Sprawdź, czy masz odpowiednie uprawnienia do folderu aapt:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  3. Uruchom Eclipse:

    sudo eclipse
  4. Uruchom projekt -> Oczyść w środowisku Eclipse

Nevin Chen
źródło
doskonały. a także sprawia, że ​​adb działa. Przypomnij mi, że powinienem zainstalować to podczas ponownej instalacji Ubuntu.
Yeung
to samo rozwiązanie dotyczy Debiana amd64
Markus Peröbner,
Ta odpowiedź stackoverflow.com/questions/19523502/... zawiera bardziej aktualne instrukcje, ia32-libs nie istniały w Elementary
Singagirl
6

Masz 100% błędu w pliku XML , ale weryfikacja XML nie pokazuje tego błędu. To jest powód, dla którego musisz najpierw sprawdzić swoje pliki XML!

Erdinc Ay
źródło
5

ZAWSZE pomocne jest spojrzenie na kartę Problemy w środowisku Eclipse. W moim przypadku pojawiał się komunikat o błędzie „ Android nie jest w stanie rozwiązać docelowego błędu „ android-8 ”, który uniemożliwiał wygenerowanie R.javy. Tak więc poprawiłem zaimportowany cel do tego, którego użyłem w pliku default.properties , a następnie wykonałem czyszczenie za pomocą Projekty-> Wyczyść i voila! R.java jest generowany automatycznie! Mam nadzieję, że to pomoże!

goseib
źródło
Dziękujemy za wskazanie karty problemów. Jestem nowy na Androida i Eclipse, więc nie korzystałem z niego wcześniej i zaczynał się frustrować. To pierwsze miejsce, w którym należy spojrzeć na ten błąd.
Maadinsh,
4

Czyszczenie projektu, zamknięcie Eclipse, ponowne otwarcie i uruchomienie mojego projektu sprawiło, że moja R.java ponownie się pojawiła ... Mam nadzieję, że to pomoże

Filippo Mazza
źródło
Musiałem także zrestartować komputer, Eclipse narzekała na brak AAPT, ale był obecny ....
Filippo Mazza
4

Upewnij się, że nie importujesz

android.R;

Zain Ali
źródło
4

R.java nigdy nie zostanie wygenerowany, jeśli wystąpią jakiekolwiek błędy w pliku res folderze . Na przykład w podfolderze z rysunkiem znajdują się dwa pliki o tej samej nazwie, jeden to icon.png, a drugi to icon.html.

Możesz zobaczyć błąd w oknie dziennika konsoli Eclipse, mówiącym: „Ikona wpisu zasobu jest już zdefiniowana”. Po usunięciu icon.html możesz wyczyścić lub po prostu usunąć genfolder. Przekonasz się, że R.java została stworzona.

Peter Mortensen
źródło
4

Odkryłem, że każdy plik zawierający duże litery w resfolderze spowoduje ten błąd. Zdarzyło mi się to z plikiem PNG , który dodałem i zapomniałem.

Peter Mortensen
źródło
3

Po przeczytaniu wielu postów i filmów z YouTube odkryłem, że każdy z nas R.javazaginął z różnych powodów.

Oto jak to naprawiłem w Eclipse:

  • Utwórz R.java w genfolderze ręcznie i zapisz.
  • Następnie przejdź do projektu i kliknij „Wyczyść”

Wyświetli się następujący komunikat, a plik zostanie automatycznie przepisany:

R.java został zmodyfikowany ręcznie! Przywracanie wygenerowanej wersji!

Anup Singh
źródło
1
Anup .. Zrobiłem to /// Ale tylko po to, aby je usunąć ... Problem nadal jest dla mnie nierozwiązany!
ejjyrex
3

Dla mnie dwukrotnie podłączyłem appcompat v7. W każdym razie w Eclipse kliknij prawym przyciskiem myszy nazwę projektu w Eksploratorze pakietów lub Nawigatorze, przejdź do Właściwości, Android i odznacz wszelkie duplikaty w sekcji Biblioteka. Może być konieczne zbudowanie -> Wyczyść później.

Shanker Kaura
źródło
2

Oczywiście nie ma jednej ostatecznej odpowiedzi na to pytanie, ale oto kolejna, której jeszcze tu nie widzę:

Miałem R.javaznikają po (próby) zespół Synchronizuj, a tam były pliki rozwiązywania konfliktów w projekcie (tj thingy.xml.mine, thingy.xml.r35etc.). Usuwanie ich / rozwiązywanie konfliktów zostało zregenerowane R.

Ben Mosher
źródło
2

Miałem ten problem. Przypadkowo usunąłem to

xmlns:tools="http://schemas.android.com/tools"

który zaczął powodować błędy kompilacji w całym projekcie w moich plikach XML, a także w plikach Java. Jak tylko przepisałem to, co usunąłem, zadziałało ponownie :)

Mohamed El-Saka
źródło
2

OK, więc jest jasne, że może być wiele przyczyn tego problemu. Jeśli korzystasz z 64-bitowego komputera z systemem Linux i po prostu konfigurujesz ADT po raz pierwszy, możesz napotkać ten problem, gdy R nie generuje się automatycznie. Sprawdź kartę konsoli, a może pojawić się błąd podobny do:

 'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'

W takim przypadku musisz zainstalować ia32-libs, używając czegoś takiego:

 sudo apt-get install ia32-libs

Zobacz tutaj, aby uzyskać szczegółowe informacje: Nie znaleziono adb Androida

Patrick
źródło
2

Kilka razy spotkałem się z tym problemem. Odkryłem, że jeśli nie zaimportuję pakietu R przy użyciu nazwy mojej aplikacji, na przykład jeśli moja aplikacja ma nazwę pakietu przykład.test, to stwierdzę, że muszę zaimportować przykład.test.R, aby uzyskać dostęp do dowolnego zasoby.

Jeśli nie zostało to zaimportowane, wówczas zasoby, które zostały zwrócone, były zasobami domyślnymi, bez żadnych moich własnych.

Powiedziawszy to, jeśli okaże się, że otrzymujesz tylko listę domyślnych zasobów, po prostu sprawdź, czy importujesz nazwę_pakietu aplikacji.R, a nie android.R.

Peter Mortensen
źródło
2

Mój problem polegał na tym, że appcompatnie było go w tym samym katalogu co mój projekt.

Przekonałem się o tym, kompilując moją aplikację z Antem .

Martin
źródło
1

Upewnij się również, że masz najnowszą wersję wtyczki ADT, i otwórz menedżera SDK systemu Android, aby zaktualizować wszystkie narzędzia SDK do najnowszej wersji. Sprawdź aktualizacje również w samym Eclipse. Niepasujące wersje spowodowały problem.

krakanie
źródło
1

Mój problem znajdował się w pliku menu. Wydaje się, że kompilator nie ostrzega, jeśli strings.xmlw plikach menu znajdują się odniesienia do łańcuchów, które nie istnieją . Sprawdź, czy twoje itempliki w menu odwołują się do łańcuchów, które nie istnieją w twoim strings.xml. Zwykle w android:title.

Stefan Anca
źródło
1

Dla mnie ten błąd został spowodowany, gdy próbowałem zduplikować istniejący res/menuzamiast tworzyć go za pomocą wizard.

Hakim
źródło
1

Wszystkie te odpowiedzi nie mogłyby działać, jeśli używasz Maven. Rozwiązaniem było dla mnie dodanie

<genDirectory>${project.basedir}/gen</genDirectory>

do sekcji konfiguracji wtyczki android-maven.

Bevor
źródło
1

Znalazłem rozwiązanie, dlaczego R.class nie jest produkowany przez Eclipse po ponownym utworzeniu - 2 czyste, kompilacja itp.

Problem jest tutaj w strings.xml:

<string name="hello">Hello World, HelloAutoComplete!</string>

<string name="app_name">HelloAutoComplete</string>

Są one domyślnie tworzone przez Eclipse podczas tworzenia projektów.

Zdecydowanie zmieniasz plik strings.xml na własne potrzeby. Czasami usuwasz plik string.xml z tych dwóch wierszy z kodu:

Stwarza problem w pliku AndroidManifest.xml:

<application android:icon="@drawable/icon"  android:label="@string/app_name">
<activity android:name=".HelloAutoComplete" android:label="@string/app_name">

Więc nie może komunikować się z ciągiem str.xml.

aarifmkhan
źródło
1

Zmieniłem nazwę pliku XML układu i dowiedziałem się później, że plik XML (dostawca widżetów w tym przypadku) nadal odnosi się do starego XML układu, który nie istnieje i który uniemożliwił automatyczne generowanie / korektę klasy R.

Howard
źródło