Android Studio mówi „nie można rozwiązać symbolu”, ale projekt się kompiluje


97

Importuję twitter4j w AndroidStudio, używając następującego pliku build.gradle:

dependencies {
  compile 'com.android.support:support-v4:18.0.+'
  compile files('libs/twitter4j-core-3.0.4.jar')
}

Projekt kompiluje się dobrze i mogę bez problemu tworzyć twitterowe obiekty. Jednak w Android Studio wszystko, co odnosi się do tej biblioteki, pokazuje „nie można rozwiązać symbolu” i wyświetla się na czerwono. Co muszę zrobić, aby Android Studio rozpoznał bibliotekę?

Próbowałem już odbudować projekt, wyczyścić ./gradlew i zamknąć i ponownie otworzyć projekt.



rok 2018, Android Studio 3+: czasami Android Studio i Gradle nie zgadzają się. rozwiązanie tutaj: stackoverflow.com/questions/50313885/ ...
user1506104

Miałem ten sam problem po zaimportowaniu projektu ćwiczeń do Android Studio. Po zaimportowaniu Android Studio dał mi ostrzeżenia i zasugerował aktualizację wersji sdk, więc postąpiłem zgodnie z radą. Potem coś nie było już kompatybilne, więc Android Studio zasugerował zmianę innej wersji na coś innego. Po zastosowaniu się do tych wszystkich rad miałem te same problemy z „nie mogę znaleźć symbolu”. Cofnąłem zmiany, ponownie zaimportowałem projekt i tym razem nie postępowałem zgodnie ze wskazówkami Android Studio. Potem błędy zniknęły. Uważaj, ślepo podążając za sugestiami tego programu.
David

Odpowiedzi:


237

Nie mam pojęcia, czy to zadziała, czy nie, ale moja jedyna dotychczasowa myśl: kliknij prawym przyciskiem myszy plik jar w drzewie plików w AS i wybierz „Dodaj jako bibliotekę ...”

EDYCJA: Możesz zrobić "Plik" -> "Unieważnij pamięci podręczne ..." i wybierz opcję "Unieważnij i uruchom ponownie", aby to naprawić.

EDYCJA 2: Ta poprawka powinna działać w przypadku wszystkich podobnych incydentów i nie jest rozdzielczością specyficzną dla twitter4j.


Nie otrzymuję tego jako opcji, gdy klikam słoik prawym przyciskiem myszy. Uruchamiam 0.2.13.
TG-T

To prawdopodobnie oznacza, że ​​już to zrobiłeś. Wypróbuj File> Project Structure i potwierdź, że widzisz plik .jar w węźle modułów.
doydoy

11
Unieważnienie pamięci podręcznych i ponowne uruchomienie nie działa dla mnie. Próbowałem również ponownie zainstalować Android Studio i ponownie zaimportować projekt. To jest bardzo irytujące ...
zegarmistrz

3
"Plik" -> "Unieważnij pamięci podręczne ..." właśnie uratował mój dzień. Zmarnowałem tak dużo czasu w tej sprawie. Dlaczego ta odpowiedź nie była najlepszym wynikiem wyszukiwania? Dziękuję bardzo!
Eric Cochran

1
wrzucając moją wdzięczność
Jewgienij Simkin

33

Spróbuj zmienić kolejność zależności w Plik> Struktura projektu> (wybierz projekt)> Zależności.

Unieważnienie pamięci podręcznych nie zadziałało, ale przeniesienie mojej kompilacji z dołu listy na górę tak.


Pomaga mi zmiana kolejności zależności, wypróbowałem wszystkie rozwiązania podane w odpowiedziach, tylko Twoja pomóż mi, dzięki.
wqycsu

Przeniesienie tylko jednej zależności w górę pomogło mi! (Android Studio 3.0.1).
Sébastien

Tak, nie jest ważne, jaką zależność przenosisz, po prostu zmień kolejność kogokolwiek, działa to również w przypadku Androida Studio 3.3.
karique

12

To właśnie zadziałało dla mnie.

W panelu Projekt kliknij prawym przyciskiem myszy nazwę projektu i wybierz Open Module Settingsz menu podręcznego.

następnie zmień na Compile SDK Versionminimalną dostępną wersję (minimalną wersję sdk ustawioną w projekcie). poczekaj, aż Android Studio załaduje wszystko.

Da ci to kilka błędów, zignoruj ​​je.

Teraz przejdź do pliku java, a studio Android zasugeruje import

import android.support.v4.app.FragmentActivity;

Zaimportuj go, a następnie wróć Open Module Settingsi zmień wersję kompilacji zestawu SDK z powrotem na taką, jaka była wcześniej.

Poczekaj, aż coś się załaduje i voila.


to świetna robota. w moim przypadku Android Studio zgłosił, że nie można rozwiązać wszystkich klas SDK (w tym String, Integer, TextView itp.). Wcześniej aStudio powiedziała mi również, że nie może znaleźć zestawu SDK dla Androida-14, którego użyłem do kompilacji moich projektów. Zignorowałem to, więc pojawiły się problemy. wreszcie znalazłem tę odpowiedź i śledziłem, zmień wersję kompilacji sdk, a następnie zadziałało. dzięki, aby zaoszczędzić mi czas.
VinceStyling

Now go to your java file and android studio will suggest you importNie w moim przypadku
NineCattoRules

9

Ponieważ mój był spowodowany przez zaimportowany projekt biblioteki, wpisz coś w build.gradle i usuń to ponownie i naciśnij teraz synchronizuj, błąd zniknął.


6

Miałem również ten problem z moją aplikacją na Androida w zależności od niektórych moich własnych bibliotek Androida (używając Android Studio 3.0 i 3.1.1).

Za każdym razem, gdy aktualizowałem bibliotekę i wracałem do aplikacji, uruchamiając Gradle Sync, Android Studio nie był w stanie wykryć zmian kodu, które wprowadziłem w bibliotece. Kompilacja działała dobrze, ale Android Studio wyświetlało czerwone linie błędów w niektórych kodach korzystających z lib.

Po zbadaniu sprawy odkryłem, że dzieje się tak, ponieważ gradle wskazuje na starą, skompilowaną wersję moich bibliotek. Jeśli przejdziesz do yourProject / .idea / libraries /, zobaczysz listę plików xml, które zawierają łącze do skompilowanej wersji twoich bibliotek. Pliki te zaczynają się od Gradle__artifacts _ *. Xml (gdzie * to nazwa twoich bibliotek).

Aby więc Android Studio pobrać najnowszą wersję twoich bibliotek, musisz usunąć te pliki Gradle__artifacts _ *. Xml, a Android Studio je zregeneruje, wskazując na najnowszą skompilowaną wersję twoich bibliotek.

Jeśli nie chcesz robić tego ręcznie za każdym razem, gdy klikniesz „Synchronizacja Gradle” (kto by chciał to zrobić…), możesz dodać to małe zadanie Gradle w pliku build.gradle swojej aplikacji.

task deleteArtifacts {
    doFirst {
        File librariesFolderPath = file(getProjectDir().absolutePath + "/../.idea/libraries/")
        File[] files = librariesFolderPath.listFiles({ File file -> file.name.startsWith("Gradle__artifacts_") } as FileFilter)

        for (int i = 0; i < files.length; i++) {
            files[i].delete()
        }
    }
}

Aby aplikacja zawsze wykonywała to zadanie przed wykonaniem synchronizacji gradle, wystarczy przejść do okna Gradle, a następnie znaleźć zadanie „deleteArtifacts” w obszarze yourApp / Tasks / other /, kliknąć je prawym przyciskiem myszy i wybrać „Execute” Przed synchronizacją ”(patrz poniżej).

Okno Gradle do konfigurowania wykonywania zadań

Teraz za każdym razem, gdy wykonujesz synchronizację Gradle, Android Studio będzie zmuszony do korzystania z najnowszej wersji twoich bibliotek.


5

Kiedy żyłem z tym problemem (czerwone kody kolorów, ale działają poprawnie) w moim projekcie;

Jako pierwszy zrobiłem to (Plik -> Wskaż kasę) -> (Unieważnij i uruchom ponownie).

Na koniec ponownie synchronizuję plik build.gradle w mojej aplikacji. Po rozwiązaniu problemu.


3

Invalidate Caches / Restart tym razem nie zadziałało dla mnie.

Znalazłem takie rozwiązanie:

  1. Usuń wiersz compile ***lub implementation ***w pliku build.gradle.

  2. Oczyść i odbuduj. W tym miejscu należy zgłosić błędy.

  3. Dodaj linię z kroku 1 z powrotem do build.gradle.

  4. Oczyść i odbuduj.

Dziwne...


2

Ten problem wystąpił u mnie, gdy mój projekt Glass nie korzystał z pakietu SDK zainstalowanego w domyślnej lokalizacji Android Studio. Używałem innej lokalizacji, którą miałem wcześniej z ADT, ponieważ próbowałem uniknąć ponownego pobierania wszystkiego. Po wskazaniu projektu z powrotem do lokalizacji SDK w lokalizacji instalacji Android Studio problem zniknął.


Tak, wydaje mi się, że to również dobry okrzyk: domyślnie studio Android zdecyduje, że wszystkie SDK są zainstalowane w domyślnym katalogu instalacyjnym Android Studio. Będzie trzeba to zmienić, jeśli coś nie jest zgodne z tym wzorcem.
doydoy

2

Miałem ten problem od kilku dni i w końcu go rozgryzłem! Przy okazji, wszystkie inne rozwiązania nie zadziałały.

Rozwiązanie: na ścieżce projektu znajdowały się znaki specjalne!

Po prostu upewnij się, że nie masz żadnego z nich i powinno być dobrze lub przynajmniej jedno z pozostałych rozwiązań powinno działać dla Ciebie.

Mam nadzieję, że to komuś pomoże!


Sprawdź, czy masz ścieżkę projektu zawierającą znaki specjalne, takie jak! (wykrzyknik). W podobnym problemie, którego doświadczyłem , to stackoverflow.com/questions/32477067/… , to była główna przyczyna. Wydaje się, że wiele aplikacji Java nie toleruje takich znaków specjalnych (np. Wykonanie „czyszczenia gradlew” z terminala mogłoby zakończyć się niepowodzeniem i wygenerować wyjątek RunTimeException.). Żadne z innych rozwiązań opublikowanych online nie pomogło mi. Ale kiedy już usunąłem! od ścieżki i wykonałem czystą kompilację, Android Studio magicznie zadziałało.
Jim C,

WOW NIESAMOWITE! Dzięki :)
Josep Escobar

1

Niedawno miałem ten sam problem z Androidem Studio 1.3. Jedynym działającym rozwiązaniem było usunięcie folderów .gradle i .idea i ponowne zaimportowanie projektu do Android Studio.


1

Dla tych, którzy wypróbowali zaakceptowaną odpowiedź i nie odnoszą sukcesu,

Spróbowałem również zaakceptowanej odpowiedzi i nie zadziałało. Następnie zaktualizowałem swój projekt w repozytorium i zsynchronizowałem projekt, a ostrzeżenia dotyczące braku możliwości rozwiązania problemu zniknęły.




0

W moim przypadku utworzyłem nowy plik za pomocą GUI i zdefiniowałem interfejs w pliku. Ciągle otrzymuję ten błąd symbolu, ponieważ plik nie jest plikiem „java”. Nie miał żadnego rozszerzenia.

Po zmianie rozszerzenia pliku na „.java” system poprawnie odnajduje symbole.


0

W moim przypadku plik jar nie miał pliku META-INF / MANIFEST.MF. Po dodaniu jednego działało!


0

W moim przypadku, pracując z AndroidStudio 2.2.3, rozwiązaniem była zmiana opakowania / dystrybucji gradle na lokalną w ustawieniach Gradle (mimo że jest to zalecane). wprowadź opis obrazu tutaj


0

To zadziałało dla mnie - (Plik -> Wskaż kasę) -> (Unieważnij i uruchom ponownie).


0

Próbowałem unieważnić pamięć podręczną / zrestartować lub wyczyścić projekt -> odbuduj projekt. To nie zadziałało dla mnie.

Ostatnim rozwiązaniem było otwarcie okna projektu po lewej stronie IDE, w trybie projektu, usunięcie folderów .gradle i .idea, NASTĘPNIE można unieważnić pamięci podręczne i ponownie uruchomić. To naprawiło.



0

Zmiana ustawień wtrysku języka zadziałała dla mnie.

Umieść kursor na dowolnym z czerwonych, podkreślonych kodów i Alt + Enter

wprowadź opis obrazu tutaj

Teraz wybierz, Language Injection Settingsa otworzy się okno, jak pokazano poniżej.

wprowadź opis obrazu tutaj

Odznacz wybraną opcję i kliknij OK

wprowadź opis obrazu tutaj

Mam nadzieję, że to komuś pomoże.


0

Zdarzyło mi się to, kiedy usunąłem całe pliki .gradle/caches, a następnie studio ściągnęło zależności. Zależności nie są widoczne w aplikacji, External Librariesale mogę pomyślnie zbudować aplikację. rebuild clean Invalidate and Restartnie mają żadnego efektu. Rozwiązałem problem w krokach:

  • Zamknij całkowicie Android Studio
  • Usunąć .idea pakiet w swoim projekcie
  • Uruchom ponownie Android Studio

0

Próbowałem tego, ale nic mi nie pomogło:

  • Invalidate Caches / Restart
  • Changing the order of dependencies
  • Sync project with Gradle Files
  • Clean -> Rebuild Project

W moim przypadku po prostu zrób:

  • Delete all files in .idea/libraries folder
  • Rebuild Project

0

Dla mnie zaktualizowałem gradle-wrapper.properties do wersji 4.4

distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

0

Znalazłem najłatwiejszy sposób

Zidentyfikuj bibliotekę, która powoduje błąd składni w Studio.

Na przykład, jeśli AppCompatActivitywyświetla błąd, wykonasz poniższą operację na zależności AppCompat.

  • Usuń zależność, która pokazuje błąd składni i synchronizację.
  • Dodaj ponownie i zsynchronizuj.

To wszystko, błąd zniknął!

Przed

Przed

Po

Po


0

Żadna z powyższych odpowiedzi nie działa dla mnie.

Po wielu próbach zaktualizowałem com.android.tools.build:gradle w Project / build.gradle z 2.3.0 do 3.0.1 i działa.

Wydaje mi się, że wersja com.android.tools.build:gradle powinna być zgodna z wersją AndroidStudio, a moja wersja AS to 3.2.1



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.