W przypadku zaćmienia nie można odwołać się do projektu biblioteki systemu Android w innym projekcie systemu Android

104

Kiedy pisałem to pytanie, udało mi się je rozwiązać, więc powtórz je tutaj dla dobra innych. Oto pierwszy problem:

Stworzyłem bardzo prosty projekt biblioteki, do którego chcę się odwołać w innym projekcie. Zrobiłem to wcześniej bez żadnych problemów, więc nie jestem pewien, dlaczego tym razem nie działa. Mam:

  1. Oznaczył projekt biblioteki za pomocą właściwości projektu. default.propertiesPlik ma ten zestaw:android.library=true

  2. W moim innym projekcie dodano odniesienie do mojego projektu biblioteki za pośrednictwem właściwości projektu. default.propertiesPlik został dodany jako odniesienie oczekiwanego IEandroid.library.reference.1=K:/android_test_ws/applicationRegistrar

  3. Zielony znacznik przy projekcie biblioteki, do którego istnieje odniesienie, zaczyna się od zielonego, a następnie zmienia się w czerwony krzyżyk.

Oznacza to, że w projekcie biblioteki musi być coś nie tak / czegoś brakuje, ale nie wiem co. Mój projekt biblioteczny przy tej okazji jest DUŻO prostszy niż poprzedni, który stworzyłem.

malcooke
źródło
Rozwiązanie to pomogło w moim przypadku: stackoverflow.com/questions/9283040/... Mam nadzieję, że ktoś pomoże
Abeer Sul

Odpowiedzi:

160

OK Oto rozwiązanie, które znalazłem, szukając pliku default.properies projektu odwołującego się (nie biblioteki) w moim systemie plików. Chociaż projekt odniesienia znajdował się w tym samym obszarze roboczym zaćmienia co projekt biblioteki, rzeczywiste pliki znajdowały się w innym miejscu w systemie plików, tj. Nie znajdowały się w tym samym folderze nadrzędnym projektu biblioteki. Gdy tylko umieściłem projekt odniesienia w tym samym folderze fizycznym, co projekt biblioteki, wszystko poszło dobrze.

Wydaje mi się, że to musi mieć coś wspólnego z androidem używającym mrówki pod osłonami.

Edycja: nazwa projektu musi odpowiadać nazwie folderu w systemie plików. To, co widzisz w Project Properties-> Android-> Library Reference, jest względną ścieżką systemu plików.

malcooke
źródło
3
Chcę również dodać, że dowiązania symboliczne nie są do tego odpowiednie. Wszystkie moje projekty były przechowywane w tym samym folderze co każdy inny w innej lokalizacji (gdzie umieściłem rzeczy, które chcę zarchiwizować), a następnie kilka dowiązań symbolicznych w folderze obszaru roboczego do tych folderów. Więc wszyscy byli w tym samym folderze co inni w obu miejscach, jednak użycie dowiązań symbolicznych wszystko zepsuło. Po załadowaniu prawdziwego folderu jako podstawowego obszaru roboczego wszystko było w porządku.
Zulaxia,
7
+1 Za wyartykułowanie tego STRASZNEGO zachowania kombinacji Eclipse / ADT. Do Twojej wiadomości, nawet umieszczenie obu projektów w tym samym folderze fizycznym nie pomoże, jeśli folder ten znajduje się w udziale Samby . Ugrrr ...
an00b
20
Czasami Eclipse usuwa odniesienie, restartuje eclipse i dodaje ponownie, teraz powinno działać.
Warpzit,
Był to problem związany z moimi projektami, które należały i znajdowały się w tym samym obszarze roboczym. Zaimportowano projekt do tego samego obszaru roboczego, co biblioteka i wszystko działało dobrze. Dziękuję za odpowiedź.
Jayshil Dave
Sprawdź, czy obszar roboczy i biblioteka znajdują się w tej samej lokalizacji folderu. Popełniłem błąd, ponownie pobierając ADT i utworzyłem projekt w obszarze roboczym C: \ users, w przeciwieństwie do mojego rzeczywistego obszaru roboczego. Nie trzeba dodawać, że ponownie sprawdź, czy projekt ORAZ biblioteka znajdują się w tym samym katalogu roboczym!
Garbit
11

Upewnij się, że oba projekty znajdują się w tym samym miejscu pracy. Aby to zrobić, podczas importu projektów upewnij się, że pole wyboru „kopiuj projekt do przestrzeni roboczej” jest zaznaczone.

Karthik Dheeraj
źródło
1
Jak mogę wykorzystać ten sam projekt biblioteki do innego projektu. Jeśli to zrobię, pokazuje symbol czerwonego krzyża .. @Karthik
Shylendra Madda
10

ten sam problem wystąpi, jeśli projekt biblioteki znajduje się na innej partycji niż bieżący obszar roboczy. Mam teraz ten sam problem. Moje źródło git znajduje się w C: i po prostu przenoszę obszar roboczy do D: i wszystko zaczyna się zawalać.

user791129
źródło
4
Jeśli projekt główny i biblioteki znajdują się na różnych dyskach , wydaje się, że Eclipse nie może rozwiązać ścieżki odniesienia od wartości bezwzględnej do względnej, a Eclipse nie jest z tego powodu zadowolony (zielony znacznik zmienia się w czerwony krzyżyk).
Pang
dla mnie też pracował. Wymieniłem wspomniany projekt na tym samym dysku (H :) i teraz jest ok
Tobia Zambon
4

Najprostszym sposobem uzyskania poprawnych ścieżek do bibliotek jest użycie interfejsu GUI z Eclipse w celu dodania biblioteki, jak pokazano na poniższym zrzucie ekranu, i pozwolenie Eclipse na umieszczenie poprawnych ścieżek względnych w project.properties. Jest to typowa konfiguracja, w której projekty biblioteki są hostowane w katalogach znacznie różniących się od głównych projektów korzystających z biblioteki. Ta metoda zadziała, jeśli „projekt libary” i projekt, który go używa, znajdują się w tym samym „obszarze roboczym” Eclipse („nie muszą” znajdować się w tym samym folderze nadrzędnym): wprowadź opis obrazu tutaj

Nilesh Pawar
źródło
4
Problem polega na tym, że biblioteka i projekt znajdują się na różnych dyskach / partycjach ... zobacz listę błędów powyżej. Twoja jest w porządku, ponieważ ścieżka biblioteki pokazuje ścieżki względne zamiast pełnych ścieżek DOS ...
kenyee
3

Upewnij się, że projekt biblioteki jest oznaczony jako „Jest biblioteką” - kliknij prawym przyciskiem myszy projekt biblioteki - właściwości - Android - zaznacz pole wyboru „Jest biblioteką” - w projekcie projektu.properties projektu biblioteki powinieneś mieć nowy wpis: „android .library = true. Teraz dodaj go do projektu, który chcesz, jak opisano w poście poniżej. (post ze zintegrowanym obrazem - od Nilesh Pawar).

Alexandru Circus
źródło
1
To działało dobrze dla mnie. Mylące jest to, że myślę, że lokalizacja tego pola wyboru „Jest biblioteką”. Nie jest intuicyjne, że w rzeczywistości jest to wybór celu bieżącej kompilacji aplikacji / biblioteki, a nie przełącznik opcji dla bibliotek, które mają zostać uwzględnione.
EtienneSky
3

Ten błąd jest wymieniany kilka razy tutaj 27199 , 35786 , 36460 i 38052

Może głosując na nich, zostanie to kiedyś naprawione ...

Laurent.B
źródło
2

Jeszcze jedna uwaga na ten sam temat.

Dla mnie te dwa projekty znajdowały się w tym samym folderze nadrzędnym i oba znajdowały się lokalnie w obszarze roboczym. Nawet wtedy problem nadal występował.

Edytowałem plik „project.properties” i wstawiłem ścieżkę bezwzględną (z ukośnikami „/” oznaczającymi separator) projektu biblioteki. Zapisałem i zamknąłem. Następnie udałem się do okna dialogowego właściwości projektu, usunąłem bibliotekę (która nadal wyświetlała ikonę krzyżyka, ale ze ścieżką abs) i dodałem ją jak zwykle. Zaskakująco problem został rozwiązany, a projekt kompiluje się i uruchamia.

To jest naprawdę dziwne i musi być błędem w ADT. Używam ADT w wersji 20.0.2

CiekawyChettai
źródło
+1. Napotkano ten problem podczas przełączania bibliotek o takich samych nazwach. Wygląda na to, że zaćmienie (lub ADT) próbuje nawiązać do starego i kończy się niepowodzeniem. Restart Eclipse pomaga. (Ubuntu 12.04, Eclipse Indigo, ADT 21.0.0)
Luten
2

kiedy programista odwołuje się do facebooka lub innego projektu biblioteki, najpierw wyczyść projekt z eclipse-> project-> clean project. które chcą pozwolić na błąd czerwonego krzyża na ekranie odniesienia.

jayesh jethava
źródło
2

U mnie po prostu ponownie uruchamiam zaćmienie i dodana biblioteka działa dobrze.

Mam na myśli to, że pierwszy raz pokazuje czerwone znaki po dodaniu projektu biblioteki. Chociaż projekt główny i projekt biblioteki eclipse znajdują się w tym samym folderze obszaru roboczego i żadne pliki zasobów nie znajdują się poza folderem projektu.

Możesz więc spróbować ponownie uruchomić zaćmienie. Miłego kodowania ...

Md Sufi Khan
źródło
1

Obejściem dla mnie było

  1. Utwórz nowy obszar roboczy
  2. Importuj projekt biblioteczny do tego obszaru roboczego
  3. Importuj żądany projekt w tym obszarze roboczym
  4. Posiadanie projektu i projektu biblioteki w tej samej docelowej wersji systemu operacyjnego Android
  5. Projekt biblioteki referencyjnej w moim projekcie

rozwiązał mój problem

KAMAR
źródło
Utworzenie nowego obszaru roboczego również rozwiązało problem. Musisz także wyczyścić projekty.
Omer Cansizoglu
1

Miałem ten sam problem, kiedy próbowałem zmienić obszar roboczy, więc oto moje rozwiązanie:

  1. importuj i kopiuj wszystkie dane projektu, w tym projekt biblioteki, do obszaru roboczego
  2. usuń odniesienie do starego projektu, klikając prawym przyciskiem myszy projekt -> Właściwości -> Android -> Biblioteka i wybierz uszkodzoną bibliotekę (tak, że jak ją nazywam) i wybierz Usuń
  3. najpierw wyczyść projekt (aby odświeżyć właściwości projektu)
  4. przejdź do projektu biblioteki Właściwości -> Android -> Biblioteka i sprawdź, czy jest biblioteka, jeśli nie kliknij Zastosuj, a następnie OK
  5. jeśli projekt biblioteki jest biblioteką, jest już zaznaczony, najpierw odznacz go, a następnie wyczyść projekt biblioteki, a następnie wykonaj ponownie krok 4
  6. przejdź do projektu, w którym chcesz, aby biblioteka była, a następnie kliknij prawym przyciskiem myszy projekt -> Właściwości -> Android -> Biblioteka, Dodaj, a następnie wybierz projekt biblioteki (powinien tam być) i kliknij Zastosuj, a następnie OK
  7. jeśli nadal się nie pojawia, wyczyść projekt jeszcze raz i to powinno wystarczyć
ibrahim saputra
źródło
1

Po prostu uruchom ponownie zaćmienie. To rozwiązuje mój problem

Manisha Patel
źródło
0

Kiedy spojrzysz na ścieżkę odniesienia przed i po, pochodzi ona z np. „C: / workspace / mylib” i przechodzi do „../../mylib” po skopiowaniu do właściwej lokalizacji, całkiem interesujące.

Sebastian
źródło
0

FYI,

Udało mi się usunąć projekty „biblioteki” (rzeczywiste projekty) z mojego obszaru roboczego (bez usuwania plików), a następnie ponownie zaimportować je za pomocą kreatora (zaimportować istniejący projekt Androida z kodu źródłowego).

JRun
źródło
Pracował też dla mnie. Właśnie usunąłem i ponownie
zaimportowałem
0

Dzięki za zadanie pytania. Dokładnie ten sam problem miałem podczas integracji Facebooka z moją aplikacją na Androida. Rozwiązałem problem, przenosząc projekt programistyczny na ten sam dysk systemu Windows, na którym znajdował się projekt biblioteki. Z jakiegoś powodu Eclipse nie może poprawnie odczytać lokalizacji projektu biblioteki z pliku default.properties , jeśli znajduje się on na innym dysku.

Girish K Gupta
źródło
0

Podobnie jak w poście Sufi Khana, rozwiązałem ten problem poprzez ponowne uruchomienie. Mój przypadek różnił się tym, że kiedy po raz pierwszy uzyskałem dostęp do Właściwości-> Android i dodałem bibliotekę, dostałem piękny zielony znacznik wyboru. Kiedy zamknąłem okno dialogowe, Eclipse nadal pokazywał błędy typu nie znaleziono klasy. Kiedy ponownie sprawdziłem właściwości, zobaczyłem czerwony znak X. Ale rozwiązanie pana Kahna (usuń złą bibliotekę, uruchom ponownie Eclipse, dodaj ponownie bibliotekę) działało dobrze.

Używam wersji 0702 pakietu ADT (zaczyna się od „klaster”, rymuje się z „kaczką”).

William T. Mallard
źródło
0

Postąpiłem zgodnie z zaakceptowaną odpowiedzią, ale musiałem też upewnić się, że mój plik „project.properties” jest czytelny.

Jeśli plik jest tylko do odczytu (wpisany do kontroli źródła), eclipse nie będzie go edytować. Dodanie odwołania do biblioteki powiedzie się, ale zmiana nie zostanie utrwalona po naciśnięciu przycisku OK.

Jeśli zamknięcie okna preferencji i ponowne otwarcie powoduje usunięcie właśnie dodanej biblioteki, może to być rozwiązanie.

repkap11
źródło
0

W przypadku, gdy projekt biblioteki nadal się nie wyświetla, spróbuj dodać flagę biblioteki we właściwościach projektu biblioteki

Dodaj android.library = true

project.properties

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-17
android.library=true
HimalayanCoder
źródło