Właśnie pobrałem i zainstalowałem nowy zestaw Android SDK. Chciałem stworzyć prostą aplikację do przetestowania go.
Kreator utworzył ten kod:
package eu.mauriziopz.gps;
import android.app.Activity;
import android.os.Bundle;
public class ggps extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
ale Eclipse daje mi błąd
R nie może zostać rozwiązany
online
setContentView(R.layout.main);
Dlaczego?
PS: Mam plik XML o nazwie main.xml
under res/layout/
.
android
eclipse
compiler-errors
android-resources
android-sdk-tools
Maurizio Pozzobon
źródło
źródło
Odpowiedzi:
Po wyśledzeniu tego problemu znalazłem tę notatkę w dokumentacji Androida:
http://source.android.com/source/using-eclipse.html
Przeglądając przykładowe samouczki na temat Androida, często używałem polecenia Ctrl+ Shift+ Odo „Organizowania importów” i generowania brakujących instrukcji importu. Czasami generuje to niepoprawną instrukcję importu, która ukrywa
R.java
klasę generowaną automatycznie podczas kompilacji.źródło
Za każdym razem, gdy miałem problem z tym, że R nie został wygenerowany, a nawet zniknął, było to spowodowane pewnym problemem w pliku układu XML, który uniemożliwił zbudowanie aplikacji.
źródło
android:icon="@drawable/XXX"
deklarację<item>
w zasobie menu, ale nie było czerwonej sygnalizacji sygnalizującej, że zasobu XXX nie można znaleźć. W innych przypadkach"@drawable/YYY"
został oflagowany, gdy nie znaleziono YYY, ale nie w tym przypadku. Z jakiegoś powodu.Kiedykolwiek dostaniesz
następnie sprawdź
/res
katalog, a plik musi zawierać błąd, który uniemożliwia zbudowanie aplikacji. Na przykład może to być plik układu lub może to być spowodowane brakiem jakiegoś zasobu, ale został on już zdefiniowany w pliku XML.Jeśli masz dodatkowe, nawet nieużywane (!) Lub niepowiązane (!) Obrazy w folderze, takim jak res / drawables-mdpi, które nie są zgodne z konwencjami nazewnictwa plików (może zawierać tylko [a-z0-9_.]), Klasa R.java może nie zostać wygenerowana, powodując ciąg zdarzeń we wszystkich innych wymienionych postach. Mam nadzieję, że to pomoże!
źródło
Spójrz na swój import. Możliwe, że linia:
tam będzie. W takim przypadku usuń go, aby Twój projekt rozwiązał R nie z domyślną klasą zasobów Android, ale z tą automatycznie wygenerowaną z folderu / res /.
źródło
I jeszcze jedna rzecz, która może powodować ten problem:
Zainstalowałem nowy ADT (v. 22). Przestał tworzyć
gen
folder, który zawieraR.java
. Rozwiązaniem było również zainstalowanie nowych narzędzi do budowania zestawu SDK systemu Android z Menedżera zestawu SDK systemu Android.Rozwiązanie znalezione tutaj
źródło
R.java
to plik, który wtyczki Android Eclipse tworzą podczas budowania aplikacji.R.java
jest tworzony w katalogu „gen”. Ten plik jest generowany na podstawie informacji w katalogu „res”. Jeśli uruchomisz wybierz „Projekt” -> „Wyczyść ...” w menu Eclipse, usunie, a następnie ponownie wygenerujeR.java
plik.Problem „R nie może zostać rozwiązany” występuje po zmianie nazwy pakietu w
AndroidManifest.xml
pliku. Używa nazwy pakietu Androida, aby utworzyć podkatalog w katalogu „gen”, w którym przechowujeR.java
plik.Zaćmienie może mieć problemy z wykonaniem czyszczenia, ponieważ nie ma pewności, gdzie
R.java
znajduje się plik po zmianie nazwy pakietu Androida. Możesz albo zmienić nazwę podkatalogu,gen
aby pasował do nazwy nowego pakietu, lub możesz zmienić nazwę pakietu z powrotem na starą. Wykonaj czyszczenie, a następnie zmień nazwę pakietu na nową, którą chcesz. Działa to najlepiej, jeśli powstrzymasz Eclipse przed próbą kompilacji podczas zmiany nazwy pakietu. W menu „Projekt” odznacz opcję „Kompiluj automatycznie”, a także, gdy okno dialogowe „Wyczyść ...” zapyta, czy powinno „Rozpocznij kompilację natychmiast”, odznacz to pole, aby nie próbowało budować podczas zmiany nazwa pakietu. Po zmianie nazwy możesz ponownie włączyć opcję „Automatycznie buduj”.Pamiętaj, że jeśli
AndroidManifest.xml
nazwa pakietu plików nie jest zgodna z nazwą pakietu Java, Eclipse automatycznie doda „import <nazwa pakietu Android> .R;” wstaw wszystkie.java
pliki z odniesieniami do R. Jeśli zmieniszAndroidManifest.xml
nazwę pakietu, czasami Eclipse nie aktualizuje wszystkich tych dodanych importów. Jeśli tak się stanie, użyj refaktoryzacji Eclipse ( ALT+ Shift+ R), aby zmienić instrukcję importu w jednym z plików Java naAndroidManifest.xml
nazwę nowego pakietu. Najlepiej to zrobić po wyłączeniu opcji „Automatycznie buduj”.źródło
import com.example.main.package.name.R;
To, co powiedział Will, było słuszne
ale dowiedziałem się, że był inny problem, który był przyczyną pierwszego. Narzędzia w katalogu SDK nie miały uprawnień do wykonania, więc było tak, jakby nie istniało dla Eclipse, więc nie zbudowało
R.java
pliku.Modyfikacja uprawnień i wybranie opcji „Automatycznie buduj” rozwiązało problem.
źródło
cd $ANDROID_SDK_ROOT/build-tools/<version>
. Następniechmod a+x
na pliki podobaaapt
,aidl
,dexdump
,dx
, itd.ANDROID_SDK_ROOT
Powinny być ustawione w danym środowisku, a to wskazuje na instalacji SDK. Na przykład/opt/android-sdk
. Ważne jest, aby ustawić oba,ANDROID_SDK_ROOT
aANDROID_NDK_ROOT
ponieważ narzędzia Android używają ich wewnętrznie. Zobacz Polecany katalog NDK? na liście użytkowników NDK.R jest automatycznie generowaną klasą, która przechowuje stałe używane do identyfikacji zasobów. Jeśli nie masz pliku R.java (byłby to gen / eu.mauriziopz.gps / R.java w środowisku Eclipse z pakietem 1.5 SDK), zaleciłbym zamknięcie i ponowne otwarcie projektu lub przejście do opcji Projekt> Zbuduj wszystko (i wybierając „Kompiluj automatycznie”, gdy jest to zalecane przez Josefa). Jeśli to nie zadziała, spróbuj utworzyć nowy projekt, jeśli problem zostanie odtworzony, opublikuj tutaj ponownie, a my przejdziemy bardziej szczegółowo.
źródło
Zamknij wszystkie pliki, wyczyść projekt, uruchom ponownie Eclipse.
źródło
Warto się zameldować
AndroidManifest.xml
. Atrybutpackage
ma poprawną wartość.To jest:
Po zmianie
R.java
zostanie ponownie wygenerowany.źródło
Ten błąd może być również spowodowany przez dodanie działania do przestrzeni nazw innej niż główna nazwa pakietu.
Na przykład, jeśli
com.example.myapp
jest to główna przestrzeń nazw dla twojego pakietu, możesz następnie dodać działanie docom.example.myapp.activities
przestrzeni nazw.To spowoduje błąd „R nie da się rozwiązać”.
Aby naprawić import R w domyślnej przestrzeni nazw w Twojej działalności, powinien wynosić:
źródło
Oprócz świetnych sugestii z poprzednich odpowiedzi upewnij się, że ustawiony jest cel Androida:
Edycja: Rok później znalazłem inną przyczynę. Miałem obraz .jpg w folderze z możliwością rysowania o tej samej nazwie co obraz .png. Odwołanie się do tego obrazu w moim kodzie musiało pomylić program i spowodowało błąd „R nie można rozwiązać”.
źródło
Upewnij się, że zainstalowałeś narzędzie do budowania systemu Android z menedżera SDK
projektu kliknij prawym przyciskiem myszy właściwości-> Java BuildPath wybierz bibliotekę i dodaj android-support.jar wykonaj następujące kroki.
Idź do Projekt-> Właściwości-> Ścieżka kompilacji Java niż wybierz kartę Zamów i eksportuj. Ustaw sprawdzoną bibliotekę .jar obsługującą system Android i umieść ją na górze listy. I czyste i odbudować .. To działa w większości przypadków
źródło
Właśnie miałem ten problem po raz milionowy i zdałem sobie sprawę, co go spowodowało: utworzyłem plik XML z dużymi literami w nazwie. Wszystkie nazwy plików XML
/res
muszą być zgodne[a-z0-9\\._]
.źródło
Najprostsze rozwiązanie - Czasami wystarczy zapisać plik XML, nad którym pracowałeś, aby uruchomić autogenerator.
Zapisz plik (np. Main.xml), a następnie usuń plik R.java i sprawdź, czy zregenerowany R.java rozwiązuje problem rozwiązania R.
źródło
Sprawdź nazwy plików XML. Upewnij się, że wszystkie są pisane małymi literami.
Upewnij się również, że wszystkie nazwy zasobów obrazów są również w DOLNEJ PRZYPADKU. Miałem wielką literę w nazwie mojego pliku jpg, co spowodowało nierozwiązany błąd R w całym moim projekcie.
źródło
R
jest generowaną klasą. Jeśli korzystasz z narzędzi programistycznych Android (ADT) , jest on generowany za każdym razem, gdy projekt jest budowany. Być może wyłączono opcję „Automatycznie buduj”.źródło
Ten błąd pojawił się w mojej instalacji Linux Mint x64. Okazało się, że wynikiem była awaria pliku
ADB
binarnego, ponieważia32-libs
pakiet nie został zainstalowany. Samo uruchomienieapt-get install ia32-libs
i ponowne uruchomienie Eclipse naprawiło błąd.Jeśli twoja dystrybucja x64 nie ma bibliotek ia32-lib, musisz wybrać Multiarch.
Sprawdź # 4 i # 5 w tym poście: http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883
Mam nadzieję, że to komuś pomoże.
źródło
Może być konieczna aktualizacja / instalacja narzędzi SDK. Uruchom ponownie Menedżera SDK Androida i zainstaluj nowy element: Android SDK Build-tools.one przez jedno usunięcie, napraw, który z nich działa dla Ciebie.
źródło
Może być konieczna aktualizacja narzędzi SDK. Uruchom ponownie Menedżera zestawu SDK systemu Android i zainstaluj nowy element: Narzędzia do budowania zestawu SDK systemu Android.
źródło
Też miałem ten problem. Okazało się, że przypadkowo usunąłem z
strings.xml
pliku zasób „nazwa_aplikacji” , co spowodowało cichy błąd. Po dodaniu go klasa R została pomyślnie wygenerowana i wszystko wróciło do normy.źródło
Spróbuj, aby nazwa nowego pliku układu XML była mała. Na przykład użyj
my_file.xml
zamiastmyFile.xml
.źródło
Jeszcze innym powodem, dla którego
R.java
nie można wygenerować się automatycznie, jest posiadanie katalogów takich jak res / drawable-hdpi , res / drawable-mdpi lub res / drawable-ldpi .1.6+ wydaje się być w porządku z tymi katalogami, ale 1.5 ich nie chce. Kiedy usunąłem te katalogi,
R.java
zacząłem ponownie automatycznie generować.źródło
Pierwsze sprawdzenie, czy jest jakiś błąd w dowolnym układzie XML, czy nie, jeśli to najpierw rozwiąż.
W przeciwnym razie usuń zależność junit z projektu i odbuduj projekt.
źródło
Często dzieje się tak z powodu numeru wersji MinSDK, który podałeś podczas tworzenia projektu. Przykład:
Jeśli chcesz, aby wersja 2.1 była minimalna, Android 2.1 ma w rzeczywistości interfejs API poziomu 7.
Możesz zobaczyć, o czym mówię, przeglądając pobrany i zainstalowany pakiet SDK. Przejdź do miejsca, w którym zainstalowałeś SDK (
C:\android-sdk-windows
na przykład) i otwórz folder o nazwie „platformy”. Zobaczysz coś takiego jak „android-7” na liście jako folder, a jeśli otworzysz, istniejesource.properties
plik, który po otwarciu za pomocą edytora tekstu pokaże odpowiednią wersję platformy.Gdy tworzysz projekt i musisz wybrać interfejs API „Build Target”, ostatnia kolumna na tej liście o nazwie „Poziom API” pokazuje liczbę, której szukasz, wypełniając ustawienie MinSDK.
Jest to prawdopodobnie jeden z najczęstszych błędów, który powoduje, że
R.java
plik nie jest tworzony w obszarze Project> gen> nazwa_pakietu> R.java.źródło
Usuń
main.out.xml
. Jestem nowy i nie wiem jeszcze, do czego służy ten plik, ale usunięcie go rozwiązało problem.źródło
Wystarczy przejść do listy menu głównego Androida. kliknij Menu kompilacji , w części Kompilacja kliknij Przebuduj projekt .
źródło
Miałem przykłady Androida 8 i próbowałem użyć zestawu Android 7 SDK. Kiedy zamknąłem projekt i otworzyłem ponownie folder aplikacji i zdecydowałem się na użycie zestawu SDK systemu Android 8, udało mi się znaleźć plik R. Mam nadzieję że to pomoże.
źródło
W moim przypadku wystąpił błąd
AndroidManifest.xml
. Inni powiedzieli, że twoje pliki XML muszą być wolne od błędów, ale szukałem tylko w folderze res /. Znajdź i napraw jak najwięcej możliwych błędów, a problem może rozwiązać się sam.źródło
W przypadku, gdy ktoś jest zainteresowany (mogę tutaj uratować ci życie), miałem błąd,
R.xml
nie można go rozwiązać, nieco inaczej w projekcie GLS. Hmmmm Po przejrzeniuR.java
znalazłem klasę generowaną automatycznieXML.java
, (myślę, że jej tam nie było).Rozwiązanie? Potrzebował nowego folderu w
res
:res\xml
i plikudefault_values.xml
tam wywołanego . Wtedy wszystko było w porządku.Na wypadek, gdyby nie masz tego pliku, jest to:
źródło