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."


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.


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.

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.


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.


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!


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".


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 ...


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.


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 .


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.


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


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!


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!


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


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


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.


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.


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!


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.


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.


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 :)


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


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.


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 .


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.


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.


1

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


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.


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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.