2013-08-09 5 views
35

Ich arbeitete an meiner App und alles war normal, bis ich versuchte, Bild in Java anzuzeigen.Android Studio: Gradle: Fehler: kann Symbolvariable nicht finden

Ich habe die App einmal ausgeführt und es lief normal, das Bild wurde angezeigt. Danach wurde ich gebeten, einige Bibliotheken zu importieren, und ich importierte sie. Danach habe ich Fehler für meine Aktivitäten bekommen.

Fehler wie:

Gradle: error: cannot find symbol variable activity_main 
Gradle: error: cannot find symbol variable button1 
Gradle: error: cannot find symbol variable button2 
Gradle: error: cannot find symbol variable textView 
Gradle: error: cannot find symbol variable secondActivity 

In MainActivity ich diese Bibliotheken importiert haben:

import android.R; 
import android.content.Intent; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.Button; 

und in secondActivity diese:

import android.R; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

Wer weiß, wie dieses Problem beheben?

EDIT: Ich löschte import android.R; und jetzt funktioniert es normal.

+0

Ein Gradle resync hat das für mich behoben. – akiraspeirs

Antwort

53

Sie sollten android.R nicht importieren. Das sollte automatisch generiert und erkannt werden. This question enthält viele hilfreiche Tipps, wenn Sie nach dem Entfernen des Imports einen Fehler erhalten, der sich auf R bezieht.

Einige grundlegende Schritte nach dem Import zu entfernen, wenn diese Fehler auftreten:

  • Reinigen Sie bauen, dann wieder aufbauen
  • Stellen Sie sicher, es gibt keine Fehler oder Fehler in der XML-Dateien
  • Stellen Sie sicher, Ressourcennamen bestehen aus [a-z0-9.]. Großbuchstaben oder Symbole sind aus irgendeinem Grund nicht erlaubt.
  • Führen Sie eine Gradle sync (über Tools> Android> Sync Projekt mit Gradle Files)
+0

Die manuelle Deklaration des "import com.your.app.package.name.R" hat die "Can not find symbol variable" für mich behoben. Aber das war nachdem ich eine Klasse von einem Modul in das Haupt-App-Projekt in Android Studio kopiert hatte und Gradle nicht bauen konnte. Aber ich würde vorschlagen, die oben genannten Optionen zuerst zu versuchen, da dies der wahrscheinliche Fall für diesen Fehler ist. – TouchBoarder

+1

Ich hatte zur Zeit ähnliches Problem. Das Problem war, dass ich in meinem Projekt mehr Module hatte. Z.B. 'com.packagename.app' Modul und' com.packagesname.library' Modul. Obwohl sowohl die Klasse als auch die Ressource "R.string" aus dem Modul "com.packagename.app" stammten, hatte ich irgendwie "import com.package.library.R" in der Klasse. Irgendwie hat Android Studio das nicht als Fehler erkannt und Gradle/Sync baut mein Projekt ohne Probleme auf. Aber als ich versuchte Unit-Tests auszuführen, war Gradle mit dem beschriebenen Fehler fehlgeschlagen. Das Entfernen des 'import com.packagename.library.R' löste mein Problem. –

+0

Hinweis: Unterstriche '_' können auch in Ressourcen-IDs verwendet werden. –

19

Wenn Sie mehrere Aromen verwenden?

-make sure the resource file is not declared/added both in only one of the flavors and in main.

Beispiel: a_layout_file.xml Datei, um die Symbolvariable (e) enthalten

src:

flavor1/res/layout/(keine Datei)

flavor2/res/Layout/a_layout_file.xml

Haupt/res/layout/a_layout_file.xml

Dieses Setup wird den Fehler geben: nicht Symbolvariable findet, ist dies, weil die Ressource-Datei nur in den beiden Geschmacksrichtungen sein kann oder nur im Haupt.

10

Wenn Sie eine String build Feld config in Ihrem Projekt verwenden, könnte dies der Fall sein:

buildConfigField "String", "source", "play" 

Wenn Sie Ihren String wie erklären darüber der Fehler passieren wird verursachen. Das Update ist es zu ändern:

buildConfigField "String", "source", "\"play\"" 
0

sicher, dass Sie Make MainActivity und .ScanActivity in Ihre AndroidManifest.xml Datei:

<activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".ScanActivity"> 

    </activity> 
0

Stellen Sie sicher, dass Variablen in Rahmen für die Methode, die es verweist. Zum Beispiel hatte ich ein Textview lokal in einer Methode in der Klasse definiert und referenzierte es in einer anderen Methode.

Ich habe die Textansichtsdefinition außerhalb der Methode direkt unterhalb der Klassendefinition verschoben, so dass die andere Methode auf die Definition zugreifen konnte, die das Problem löste.

0

Stellen Sie sicher, dass das importierte R nicht von einem anderen Modul stammt. Ich hatte einen Kurs von einem Modul zum Hauptprojekt verlegt, und der R war derjenige aus dem Modul.