Entwickeln für Android in Eclipse: R.java wird nicht regeneriert

309

Ich habe herausgefunden, dass mein R.java nie aktualisiert wird, daher enthält es keine Informationen zu meinen neuen Ressourcen. Daher habe ich beschlossen, es zu löschen, und dachte, dass Eclipse eine neue generieren würde. Aber das ist nicht passiert und ich habe jetzt kein R.java. Wie kann ich einen regenerieren?

Ich benutze Windows 7.

Aus einem der Kommentare: " Projekt ausführen -> Bereinigen hat das Problem für mich verursacht. Durch Bereinigen wird R.java gelöscht ... und aus irgendeinem Grund generiert das Plugin die Datei nicht neu."

Peter Mortensen
quelle
Meine Lösung beim Reinigen funktionierte nicht: Ich musste Build Tools im SDK-Manager herunterladen und dann das System neu starten. Ich habe ADT 22.3.0.
Moradnejad

Antworten:

177

Diese Seite schlägt vor:

Wenn Sie ein Clean für das Projekt ausführen, sollten alle generierten Java-Dateien neu generiert werden, nämlich R.

...und...

In Eclipse wird im Menü Projekt eine Option automatisch erstellt. Dies würde Ihnen helfen, die R.java-Datei jedes Mal zu erstellen, wenn Änderungen vorgenommen werden. Die Option Reinigen ... finden Sie auch unter Projekt.

Diese Seite schlägt eine andere Lösung vor.

aioobe
quelle
1
Wer hätte gedacht, danke Jungs +1 hier, ich hatte ein Problem mit meinem Layout und so wurde R.Java nicht erstellt. Großartige Köpfe hoch! Prost.
101
Projekt-> Reinigen hat das Problem für mich verursacht. Durch das Bereinigen wird R.java gelöscht ... und aus irgendeinem Grund generiert das Plugin die Datei nicht neu.
Cerin
7
Ich hatte dieses Popup, als ich eine Verknüpfung zu einer Bibliothek herstellte, für die eine andere Android-Support-API-Version erforderlich war als installiert. Die Abhängigkeiten haben nicht funktioniert und mein R wurde danach nicht generiert. Wie andere gesagt haben, wird es im Fehlerprotokoll angezeigt. Überprüfen Sie es dort.
Mikebabcock
1
In meinem Fall wird beim Reinigen des Projekts nur entfernt R.java , anstatt es neu zu generieren. stackoverflow.com/questions/13065425/…
RobinJ
96
R.java wird nicht neu generiert, wenn im res-Verzeichnis Fehler auftreten. Fehler behoben -> Problem in meinem Fall gelöst :)
JavaRunner
300

Ich fand das mit einem kaputten Layout und alles explodiert. Entspannen Sie sich, es ist wie dieser alte Fehler, als Sie das Programmieren von C gelernt haben, bei dem Sie ein Semikolon vergessen und es hundert Fehler erzeugt. Viele geraten in Panik, drücken alle Knöpfe und machen die Sache noch schlimmer.

Lösung

  • Stellen Sie sicher, dass die R.Links nicht beschädigt sind. Beheben Sie alle Fehler in Ihren XML-Dateien . Wenn etwas in den ADKs defekt ist, Rwird es nicht regeneriert.
  • Wenn Sie etwas getroffen und import android.Rin Ihrer Aktivität erstellt haben, entfernen Sie es .
  • Run Project -> Sauber . Dadurch werden R und BuildConfig gelöscht und neu generiert.
  • Stellen Sie sicher, dass Projekt -> Automatisch erstellen aktiviert ist. Wenn nicht, erstellen Sie es manuell über Menu -> Project -> Build Project.
  • Warten Sie einige Sekunden, bis die Fehler verschwunden sind.
  • Wenn es nicht funktioniert, löschen Sie alles im Ordner / gen /
  • Wenn es immer noch nicht funktioniert, klicken Sie mit der rechten Maustaste auf Ihr Projekt -> Android Tools -> Projekteigenschaften korrigieren .
  • Überprüfen Sie Ihre * .properties- Dateien (im Stammordner Ihres App-Ordners) und stellen Sie sicher, dass die darin enthaltenen Links nicht beschädigt sind.
  • Klicken Sie mit der rechten Maustaste auf Ihr Projekt> Eigenschaften> Android . Sehen Sie sich die Abschnitte Project Build Target und Library auf der rechten Seite an. Ihr Build-Ziel sollte mit dem Ziel in Ihrer AndroidManifest.xml übereinstimmen. Wenn in AndroidManifest das Ziel 17 festgelegt ist, stellen Sie sicher, dass der Zielname Android 4.2 lautet. Wenn Ihre Bibliothek ein X unter der Referenz hat, entfernen Sie die Bibliothek und fügen Sie sie erneut hinzu, bis ein grünes Häkchen angezeigt wird. Dies kann passieren, wenn Sie einige Dateien und Ordner verschoben haben.

Was tun, wenn sich R nicht regeneriert?

Dies geschieht normalerweise, wenn Sie eine beschädigte XML-Datei haben.

  • Überprüfen Sie Fehler in Ihren XML-Dateien, hauptsächlich im /res/Ordner
  • Gemeinsame Orte sind /layout/und /values/, besonders wenn Sie kürzlich einen von ihnen geändert haben
  • Überprüfen Sie AndroidManifest.xml. Ich finde, dass ich oft einen String ändere und vergesse, den String-Namen von zu ändern AndroidManifest.xml.
  • Überprüfen Sie, ob Android SDK Build-toolsinstalliert ist. Fenster -> Android SDK Manager -> Tools -> Android SDK Build-Tools
  • Stellen Sie sicher, dass Sie beim Aktualisieren des Android SDK Toolsund auch das Android SDK Platform-toolsund aktualisieren Android ADK Build-tools. Die Erstellung schlägt im Hintergrund fehl, wenn sie nicht übereinstimmen.
  • Wenn Sie das Problem nicht finden können, klicken Sie mit der rechten Maustaste auf / gen / -> Aus lokalem Verlauf wiederherstellen ... -> kreuzen Sie R.java an -> klicken Sie auf Wiederherstellen . Selbst wenn das Problem dadurch nicht gelöst wird, werden die zusätzlichen Fehler behoben, damit das Problem leichter gefunden werden kann.
Muz
quelle
21
Dies sollte die beste Antwort sein!
john.k.doe
6
In der Tat wurde mir klar, dass meine Umgebung noch ein Update der Tools benötigt.
woodleg.as
11
Fenster-> Android SDK Manager-> Tools-> Android SDK Build-Tools Dies ist die Lösung für mich, upvoted
1
Ich habe Dutzende von Antworten gelesen und nur diese erwähnte die Suche nach SDK-Build-Tools. Ich lasse Eclipse blind alle meine Android-Tools herunterladen und installieren, wenn dies angeboten wird. Es hat diesen Teil völlig verfehlt.
Justin Aquadro
1
Überprüfen Sie die Konsole, geben Sie möglicherweise detaillierte Fehler an, die behoben werden müssen, und erstellen Sie dann. Dies half in meinem Fall
David72
40

Ich hatte das gleiche Problem. Beim Auschecken stellte ich fest, dass der Name der XML-Ressource im Layout nicht die richtige Namenskonvention hatte. Es hatte einige Großbuchstaben. Also habe ich es umbenannt, um alle Buchstaben in Kleinbuchstaben zu schreiben, und die Magie hat funktioniert.

Amit Kumar
quelle
2
tnx ... dumm mich zu denken, ich könnte Großbuchstaben in meinen Layoutnamen verwenden
Kevin
hat auch bei mir funktioniert: Die Konsole hat Folgendes gemeldet: [2010-09-22 16:19:40 - myproject] res \ drawable-ldpi \ downloadNow.png: Ungültiger Dateiname: darf nur [a-z0-9_.] enthalten
Sami
1
Danke, das war mein Problem. Ich hatte eine XML-Datei im Layout-Ordner mit einem Großbuchstaben, und meine gesamte R.java-Datei fehlte / wurde aufgrund dessen nicht generiert. Die einzige Möglichkeit, dies zu wissen, bestand darin, zu erkennen, dass die Namenskonvention kein Kapital zuließ. Es wurden keine Fehler generiert.
Lemmings19
1
Wenn Sie Ressourcendateien oder Attribute benennen, versuchen Sie, sie so zu benennen, als würden Sie eine Variable in Java benennen. Die R.-Klasse setzt die Ressourcen, dh id, zeichnbare XML-Dateinamen, mit einer öffentlichen statischen Endkonstante. Wenn Sie also "-", "Sonderzeichen" setzen, wird die Erzeugung von R gestoppt, da diese Symbole möglicherweise andere arithmetische Mittel haben.
IronBlossom
1
Ja, das war das Problem für mich. Eine Datei in meiner res / xml bezog sich auf eine Layoutdatei, die nicht vorhanden war. Dies führt anscheinend dazu, dass R.java nicht generiert wird. Wenn ich also Clean ausführe, führt dies zu einer fehlenden R.java, was zu Hunderten von Importfehlern führt ...
Cerin
28

Ein Grund, warum die R.class plötzlich verloren gehen kann, ist, wenn Ihre XML-Dateien Fehler enthalten. Zum Beispiel, wenn Sie eine XML-Datei mit Großbuchstaben im Namen wie myCoolLayout.xml hinzufügen, was nicht zulässig ist. Oder wenn Sie Referenzen haben, die nicht auf vorhandene Dateien usw. verweisen.

Pawel
quelle
17

Verwenden Sie in Eclipse einfach Projekt -> Bereinigen, um das Projekt zu bereinigen. Die R.java wird automatisch (neu) erstellt.

Wenn dies aus irgendeinem Grund nicht funktioniert: Stellen Sie sicher, dass Ihre layout.xml-Dateien keine Fehler enthalten. Eclipse scheint hier etwas fehlerhaft zu sein: Manchmal werden weder die Fehler im XML noch im Paket-Explorer markiert. In einem solchen Fall: Sehen Sie sich die Ansicht "Konsole" oder "Probleme" an, nachdem Sie "sauber" verwendet haben. Alle Fehler sollten dort angezeigt werden. Repariere sie und wiederhole eine saubere.

HINWEIS: Es ist NICHT erforderlich, die Fehler zu beheben, die aufgrund einer fehlenden R-Datei auftreten! Beheben Sie einfach die XML-Dateien und andere Projektfehler und verwenden Sie clean!

masi
quelle
Stellen Sie sicher, dass die Namenskonventionen für Ressourcendateien korrekt sind. @Masi danke für deinen Tipp, in der "Konsole" nach der Reinigung nach Fehlern zu suchen. das hat mir geholfen.
Bharath Booshan
10

Schnelle Lösung:

Der Paketname im Manifest muss mit dem im /srcOrdner /genübereinstimmen. Das Ordnerpaket wird automatisch reproduziert.

Detaillierte Beobachtung:

Beachten Sie den Namen des Pakets im /genOrdner. In meinem Fall war es anders als im /srcOrdner.

Das Paket, auf das im Manifest verwiesen wird, war das des /genOrdners.

Ich habe versucht, ein Paket mit dem Namen des /srcOrdners zum /genOrdner hinzuzufügen, um zu sehen, was passiert wäre, aber dies hat das Problem nicht gelöst. Ich entfernte dann den Paketnamen, der nicht mit dem Paketnamen des /srcOrdners übereinstimmte. Dieses Paket mit dem Namen, der nicht dem /srcOrdner entsprach, wurde neu erstellt, sobald ich es entfernt habe.

Da die Paketreferenz im Manifest derjenigen entsprach, die sinnlos neu erstellt wurde und nicht mit dem Paket im /srcOrdner übereinstimmte , wurde dies aufgefordert, package = "oldPackage"mit dem umzubenennen package = "srcFolderPackage".

androidWorkerTheEighth
quelle
9

Ich hatte das gleiche Problem und fand schließlich das Problem: In der Datei strings.xml habe ich die Zeile nicht beibehalten <string name="app_name">program-name</string> die beim Erstellen eines neuen Android-Projekts standardmäßig vorhanden ist . Ich dachte, es wurde nur für das Programm HelloWord verwendet, das das ursprüngliche Programm ist.

Die AndroidManifest.xml verweist jedoch auf diesen Wert, daher:

=> Ein Kompilierungsfehler;
=> die R.java wird nicht aktualisiert;
=> ID werden nicht erkannt ...

Glaux
quelle
Die Zeile in der Zeichenfolge.xml lautet "<string name =" app_name "> Name des Programms </ string>". Entschuldigung, ich hatte ein Problem mit meinem Beitrag.
Glaux
9

Android hat im SDK-Build-Tool ADT 22 den Build-Mechanismus hinzugefügt. Sie müssen nur die folgenden Schritte ausführen.

  1. Aktualisieren Sie das Android SDK-Tool
  2. Aktualisieren Sie das Android SDK Platform Tool
  3. Aktualisieren Sie das Android SDK Build Tool
  4. Fügen Sie der Pfadvariablen den Pfad Ihres Build-Tools hinzu. (Pfad zu ---- IHR VERZEICHNIS-PFAD \ android-sdk \ build-tools)

Dies wird das Problem lösen.

Amol
quelle
Meine Antwort ist die einzige, die sich auf die Frage bezieht. habe immer noch nur 3 Stimmen. seltsam!
Mr.India
8

Wenn Ihr R.java nicht generiert wird, besteht eine der Lösungen darin, die Layoutdatei mit dem Namen "blabla.out.xml" zu löschen.

Versuchen Sie nach dem Löschen dieser Datei, das Projekt über das Menü Projekt -> Bereinigen zu bereinigen .

Shashank
quelle
7

Als Verallgemeinerung von Glaux Antwort, wenn Sie irgendwelche Fehler in dem resVerzeichnis, dann erzeugt R.java nicht - auch wenn Sie sauber und wieder aufzubauen. Beheben Sie diese Fehler zuerst.

Beispiel: Wenn Sie eine Bilddatei mit dem Namen "myimage-2.jpg" hinzufügen, betrachtet das System dies als Fehler, da Dateinamen auf alphanumerische Werte beschränkt sind. Führen Sie nach dem Hinzufügen von Dateien eine Aktualisierung in Ihrem 'res'-Verzeichnis durch und überwachen Sie die Ausgabe in Ihrem Konsolenfenster auf Warnungen vor Dateinamen.

Abel
quelle
Genau! Dies passiert mir gelegentlich, wenn ich Zeichenfolgen in meiner Datei strings.xml umbenenne. Dies kann baumelnde Referenzen in meinen Layoutdateien erzeugen. Und DAS hemmt die Produktion von R.java. Schade, dass es keine Möglichkeit gibt, XML-IDs umzugestalten.
Scott Biggs
6

Wenn Ihr Betriebssystem Ubuntu ist, kann ich einige Vorschläge machen:

  1. Installieren oder aktualisieren Sie ia32-lib:

    sudo apt-get upgrade ia32-libs
  2. Überprüfen Sie, ob Sie die richtige Berechtigung für den Ordner aapt haben:

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

    sudo eclipse
  4. Führen Sie Project -> Clean in Eclipse aus

Nevin Chen
quelle
Ausgezeichnet. und es macht auch adb funktioniert. Erinnern Sie mich nur daran, dass ich dies installieren sollte, wenn Sie Ubuntu neu installieren.
Yeung
Die gleiche Lösung gilt für Debian amd64
Markus Peröbner
Diese Antwort stackoverflow.com/questions/19523502/… enthält frischere Anweisungen, ia32-libs gab es nicht auf Elementary
Singagirl
6

Sie haben zu 100% einen Fehler in einer XML-Datei , aber die XML-Überprüfung zeigt Ihnen den Fehler nicht an. Dies ist der Grund, warum Sie zuerst Ihre XML-Dateien überprüfen müssen!

Erdinc Ay
quelle
5

Es ist IMMER hilfreich, einen Blick auf die Registerkarte Probleme in Eclipse zu werfen . In meinem Fall wurde die Fehlermeldung " Android kann Ziel 'Android-8' nicht beheben " angezeigt, die die Generierung von R.java verhinderte. Also habe ich das importierte Ziel auf das korrigiert , das ich in der Datei default.properties verwendet habe, und dann eine Bereinigung über Projects-> Clean and voila! R.java wird automatisch generiert! Ich hoffe es hilft!

Goseib
quelle
Vielen Dank für den Hinweis auf die Registerkarte Probleme. Ich bin neu in Android und Eclipse, habe es also vorher nicht benutzt und wurde frustriert. Es ist der erste Ort, an dem Sie nachsehen müssen, wenn dieser Fehler auftritt.
Maadinsh
4

Durch das Bereinigen des Projekts, das Schließen von Eclipse, das erneute Öffnen und das Starten meines Projekts wurde mein R.java endlich wieder angezeigt ... Ich hoffe, es hilft

Filippo Mazza
quelle
Ich musste auch neu starten, Eclipse beschwerte sich über fehlende Aapt, aber es war vorhanden ....
Filippo Mazza
4

Stellen Sie sicher, dass Sie nicht importieren

android.R;

Zain Ali
quelle
4

R.java wird niemals generiert, wenn der resOrdner Fehler enthält . Im zeichnbaren Unterordner befinden sich beispielsweise zwei Dateien mit demselben Namen, eine ist icon.png und die andere ist icon.html.

Im Protokollfenster der Eclipse-Konsole wird ein Fehler angezeigt, der besagt, dass das Symbol für den Ressourceneintrag bereits definiert ist. Nach dem Löschen von icon.html können Sie den genOrdner bereinigen oder einfach löschen . Sie werden feststellen, dass R.java erstellt wurde.

Peter Mortensen
quelle
4

Ich habe festgestellt, dass jede Datei mit Großbuchstaben im resOrdner diesen Fehler verursacht. Dies geschah mir mit einer PNG- Datei, die ich hinzugefügt und vergessen hatte.

Peter Mortensen
quelle
3

Nachdem ich viele Beiträge und YouTube-Videos gelesen hatte, stellte ich fest, dass jeder von uns R.javaaus verschiedenen Gründen vermisst wurde.

So habe ich das in Eclipse behoben:

  • Erstellen Sie R.java manuell im genOrdner und speichern Sie es.
  • Gehen Sie danach zu Projekt und klicken Sie auf "Reinigen".

Die folgende Meldung wird angezeigt und Ihre Datei wird automatisch neu geschrieben:

R.java wurde manuell geändert! Zurück zur generierten Version!

Anup Singh
quelle
1
Anup ..Ich habe das getan /// Aber nur um entfernt zu werden, als ich es gereinigt habe ... Das Problem ist für mich immer noch ungelöst!
Ejjyrex
3

Für mich hatte ich zweimal v7 appcompat verlinkt. Wie auch immer, klicken Sie in Eclipse mit der rechten Maustaste auf den Projektnamen im Paket-Explorer oder Navigator, gehen Sie zu Eigenschaften, Android und deaktivieren Sie alle Duplikate im Abschnitt Bibliothek. Möglicherweise müssen Sie anschließend Build -> Clean erstellen.

Shanker Kaura
quelle
2

Es gibt offensichtlich keine endgültige Antwort darauf, aber hier ist eine andere, die ich hier noch nicht sehe:

Ich hatte R.javaverschwinden nach (Versuch) ein Team synchronisieren, und es gab Konfliktlösung Dateien im Projekt (dh thingy.xml.mine, thingy.xml.r35usw.). Löschen / Lösen der Konflikte neu generiert R.

Ben Mosher
quelle
2

Ich hatte dieses Problem. Aus Versehen habe ich das gelöscht

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

Dies verursachte Build-Fehler im gesamten Projekt sowohl in meinen XML-Dateien als auch in meinen Java-Dateien. Sobald ich das, was ich gelöscht habe, erneut eingegeben habe, hat es wieder funktioniert :)

Mohamed El-Saka
quelle
2

OK, es ist klar, dass es viele Ursachen für dieses Problem geben kann. Wenn Sie sich auf einem 64-Bit-Linux-Computer befinden und das ADT gerade zum ersten Mal einrichten, tritt möglicherweise dieses Problem auf, bei dem R nicht automatisch generiert wird. Überprüfen Sie die Registerkarte Konsole, und möglicherweise wird ein Fehler angezeigt, der dem folgenden ähnelt:

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

Wenn dies der Fall ist, müssen Sie ia32-libs installieren, indem Sie Folgendes verwenden:

 sudo apt-get install ia32-libs

Siehe hier für Details: Android adb nicht gefunden

Patrick
quelle
2

Ich bin ein paar Mal auf dieses Problem gestoßen. Ich stellte fest, dass ich, wenn ich das Paket R nicht über den Namen meiner Anwendung importierte, z. B. wenn meine Anwendung den Paketnamen example.test hatte, example.test.R importieren musste, um auf eines der Elemente zugreifen zu können Ressourcen.

Wenn dies nicht importiert wurde, waren die Ressourcen, die zurückgegeben wurden, die Standardressourcen, von denen keine meine eigenen enthalten waren.

Wenn Sie jedoch feststellen, dass Sie nur eine Liste der Standardressourcen erhalten, überprüfen Sie einfach, ob Sie application_package_name.R und nicht android.R importieren.

Peter Mortensen
quelle
2

Mein Problem war, dass appcompates sich nicht im selben Verzeichnis wie mein Projekt befand.

Das habe ich beim Kompilieren meiner App mit Ant herausgefunden .

Martin
quelle
1

Stellen Sie außerdem sicher, dass Sie über die neueste Version des ADT-Plugins verfügen, und öffnen Sie den Android SDK-Manager, um alle SDK-Tools auf die neueste Version zu aktualisieren. Suchen Sie auch in Eclipse selbst nach Updates. Nicht übereinstimmende Versionen haben das Problem für mich verursacht.

krächzen
quelle
1

Mein Problem lag in einer Menüdatei. Der Compiler scheint Sie nicht zu warnen, wenn in Menüdateien auf Zeichenfolgen strings.xmlverwiesen wird, die darin nicht vorhanden sind. Überprüfen Sie, ob Ihre items in Ihrem Menü XML-Dateien auf Zeichenfolgen verweisen, die in Ihrem nicht vorhanden sind strings.xml. Normalerweise in android:title.

Stefan Anca
quelle
1

Für mich wurde dieser Fehler verursacht, als ich versuchte, ein vorhandenes zu duplizieren, res/menuanstatt eines mit dem zu erstellen wizard.

Hakim
quelle
1

Alle diese Antworten könnten nicht funktionieren, wenn Sie Maven verwenden. Die Lösung für mich war hinzuzufügen

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

zum Konfigurationsabschnitt des Android-Maven-Plugins.

Bevor
quelle
1

Ich habe eine Lösung gefunden, warum R.class nicht von Eclipse erstellt wird, nachdem es erneut erstellt wurde - 2 bereinigen, erstellen usw.

Das Problem ist hier in strings.xml:

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

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

Diese werden standardmäßig von Eclipse erstellt, wenn Sie Projekte erstellen.

Auf jeden Fall ändern Sie die Datei strings.xml für Ihre eigenen Anforderungen. Manchmal löschen Sie die string.xmls diese beiden Zeilen aus Ihrem Code:

Es liegt ein Problem in der Datei AndroidManifest.xml vor:

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

Es kann also nicht mit strings.xml kommunizieren.

aarifmkhan
quelle
1

Ich habe den Namen meiner Layout-XML-Datei geändert und später herausgefunden, dass sich die XML-Datei (in diesem Fall Widget-Anbieter) immer noch auf die alte Layout-XML bezieht, die nicht vorhanden ist und die automatische Generierung / Korrektur der R-Klasse verhindert.

Howard
quelle