1131 Stimmen

R kann nicht aufgelöst werden - Android-Fehler

Ich habe gerade das neue Android SDK heruntergeladen und installiert. Ich wollte eine einfache Anwendung erstellen, um sie zu testen.

Der Assistent hat diesen Code erstellt:

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);
    }
}

sondern Eclipse gibt mir die Fehlermeldung

R kann nicht aufgelöst werden

im Netz

setContentView(R.layout.main);

Warum?

PS: Ich habe eine XML-Datei mit dem Namen main.xml unter res/layout/ .

89voto

R.java ist eine Datei, die das Android Eclipse Plugin während der Erstellung Ihrer Anwendung erstellt. R.java wird unter dem Verzeichnis "gen" erstellt Verzeichnis erstellt. Diese Datei wird aus den Informationen im Verzeichnis "res" erzeugt Verzeichnis. Wenn Sie im Eclipse-Menü "Projekt" -> "Bereinigen..." wählen Menü wählen, wird die Datei entfernt und anschließend neu generiert. R.java Datei.

Das Problem "R kann nicht aufgelöst werden" tritt auf, wenn Sie den Paketnamen in der AndroidManifest.xml Datei. Es verwendet Ihr Android Paketnamen, um ein Unterverzeichnis unter dem Verzeichnis "gen" zu erstellen, in dem speichert es die R.java Datei.

Eclipse kann Probleme bei der sauberen Ausführung haben, weil es verwirrt ist über wo die R.java Datei ist, wenn Sie das Android-Paket geändert haben Namen. Sie können entweder das Unterverzeichnis umbenennen unter gen passend zu Ihrem oder Sie können den Paketnamen wieder auf den alten Namen zurücksetzen Namen zurücksetzen. Führen Sie die Bereinigung durch und ändern Sie dann den Paketnamen in den neuen Namen den Sie wollen. Dies funktioniert am besten, wenn Sie Eclipse davon abhalten, zu versuchen zu bauen während Sie den Paketnamen ändern. Unter dem Menü "Project" (Projekt) deaktivieren Sie die Option "Build Automatically" und auch im "Clean..."-Dialog fragt, ob er "sofort einen Build starten" soll deaktivieren Sie das Kontrollkästchen, damit nicht versucht wird, ein Paket zu erstellen, während Sie den Paketnamen ändern. Nachdem Sie den Namen geändert haben, können Sie die Option "Build Automatisch" wieder einschalten.

Beachten Sie, dass, wenn Ihr AndroidManifest.xml Dateipaketname stimmt nicht überein nicht mit dem Namen Ihres Java-Pakets übereinstimmt, fügt Eclipse am Ende automatisch ein Zeile "import <Ihr Android-Paketname>.R;" in alle Ihre .java Dateien die einen Bezug zu R haben. Wenn Sie Ihre AndroidManifest.xml Paketnamen, manchmal aktualisiert Eclipse nicht alle diese hinzugefügten Importe. Sollte dies der Fall sein, verwenden Sie das Eclipse-Refactoring ( ALT + Shift + R ), um die Import-Anweisung in einer Ihrer Java-Dateien zu ändern Ihre neue AndroidManifest.xml Paketname. Es ist am besten, dies zu tun während Sie "Automatisch erstellen" deaktiviert haben.

42voto

Will Punkte 18909

R ist eine automatisch generierte Klasse, die die Konstanten enthält, die zur Identifizierung Ihrer Ressourcen verwendet werden. Wenn Sie keine R.java-Datei haben (in Eclipse mit dem 1.5 SDK wäre das gen/eu.mauriziopz.gps/R.java), empfehle ich Ihnen, Ihr Projekt zu schließen und erneut zu öffnen oder zu Projekt > Alles erstellen zu gehen (und dort "Automatisch erstellen" zu wählen, wie von Josef empfohlen). Wenn das nicht funktioniert, versuchen Sie, ein neues Projekt zu erstellen. Wenn das Problem erneut auftritt, posten Sie hier erneut und wir werden mehr ins Detail gehen.

29voto

sharika Punkte 1

Schließen Sie alle Dateien, löschen Sie das Projekt und starten Sie Eclipse neu.

25voto

green Punkte 97

Es lohnt sich, nachzusehen AndroidManifest.xml . Das Attribut package den richtigen Wert hat.

Das heißt:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...

Nachdem Sie das geändert haben, wird die R.java wird neu generiert.

21voto

Rob Punkte 4653

Dieser Fehler kann auch durch das Hinzufügen einer Aktivität zu einem Namespace verursacht werden, der sich von dem Root-Namespace für Ihr Paket unterscheidet.

Zum Beispiel, wenn com.example.myapp der Root-Namensraum für Ihr Paket ist, können Sie dann eine Aktivität zum com.example.myapp.activities Namensraum.

Dies führt zu der Fehlermeldung "R kann nicht aufgelöst werden".

Um den Import zu beheben, sollte das R im Standard-Namensraum in Ihrer Aktivität sein:

import com.example.myapp.R;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X