2013-08-09 14 views
35

Pracowałem nad moją aplikacją i wszystko było w porządku, dopóki nie spróbowałem wyświetlić obrazu w Javie.Android Studio: Gradle: błąd: nie można znaleźć zmiennej symbolu

Po uruchomieniu aplikacji uruchomiłem się normalnie, obraz został wyświetlony. Potem poprosił mnie o zaimportowanie niektórych bibliotek i zaimportowałem je. Potem dostałem błędy za moje działania.

Błędy takie jak:

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 

W główną działalność Mam importowanych tych bibliotek:

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

aw secondActivity nich:

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

Czy ktoś wie jak rozwiązać ten problem?

EDYCJA: Usunąłem import android.R; i teraz działa normalnie.

+0

Resynchronizacja programu Gradle naprawiła to za mnie. – akiraspeirs

Odpowiedz

53

Nie powinieneś importować android.R. To powinno być automatycznie generowane i rozpoznawane. This question zawiera wiele pomocnych wskazówek, jeśli po usunięciu importu wystąpi błąd związany z R.

Niektóre podstawowe kroki po usunięciu import, jeśli pojawiają się te błędy:

  • Oczyść swój build, a następnie odbudować
  • Upewnij się, czy nie ma błędów i literówek w plikach XML
  • upewnić się, że nazwy zasobów składają się z [a-z0-9.]. Stolice lub symbole nie są dozwolone z jakiegoś powodu.
  • Przeprowadzić Gradle synchronizacji (poprzez menu Narzędzia> Android> Synchronizacja projektu z Gradle pliki)
+0

Ręczne zadeklarowanie "importu com.your.app.package.name.R" naprawiło dla mnie "nie można znaleźć zmienną symbolu". Ale to było po tym, jak skopiowałem klasę z modułu do głównego projektu aplikacji w Android Studio i nie udało się zbudować Gradle. Ale sugerowałbym najpierw wypróbowanie powyższych opcji, ponieważ jest to prawdopodobny przypadek tego błędu. – TouchBoarder

+1

Miałem podobny problem. Problem polegał na tym, że w moim projekcie miałem więcej modułów. Na przykład. 'com.packagename.app' module i moduł' com.packagename.library'. Chociaż zarówno klasa, jak i zasób 'R.string' pochodziły z modułu' com.packagename.app', w jakiś sposób miałem 'import com.package.library.R' w klasie. W jakiś sposób Android Studio nie rozpoznało tego jako błędu, a Gradle/Sync zbudował mój projekt bez problemów. Ale kiedy próbowałem uruchomić testy jednostek, kompilacja Gradle nie powiodła się z opisanym błędem. Usunięcie 'importu com.packagename.library.R' rozwiązało mój problem. –

+0

Uwaga: podkreślenie '_' może być również użyte w identyfikatorze zasobu –

19

Jeśli używasz wielu smaków?

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

przykład: a_layout_file.xml pliku zawierającego zmienną (ów) symbol

SRC

flavor1/RES/rozkład/(nie pliku)

flavor2/RES/layout/a_layout_file.xml

główny/RES/layout/a_layout_file.xml

Taka konfiguracja daje błąd: nie można odnaleźć symbol zmienny, to dlatego, że plik zasobów może być tylko w dwóch smakach lub jedynie w głównym.

10

Jeśli używasz pole config String kompilacji w projekcie, może to być przypadek:

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

Jeśli zadeklarować swój ciąg jak powyżej spowoduje błąd wydarzy. Rozwiązaniem jest go zmienić na:

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

Sprawdź, czy masz MainActivity i .ScanActivity do pliku AndroidManifest.xml:

<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

Upewnij się, że zmienne są w zakresie do metody, która odwołuje go. Na przykład zdefiniowałem widok tekstowy lokalnie w metodzie w klasie i odwoływałem się do niej w innej metodzie.

Przesunąłem definicję widoku tekstowego poza metodę tuż poniżej definicji klasy, aby druga metoda mogła uzyskać dostęp do definicji, która rozwiązała problem.

0

upewnij się, że zaimportowany R nie pochodzi z innego modułu. Przeniosłem klasę z modułu do głównego projektu, a R było tym z modułu.