Biblioteki nie są już dodawane do APK po aktualizacji do ADT 22

238

Mam dość duży projekt aplikacji na Androida, który odwołuje się do kilku projektów bibliotecznych. Wszystko było w porządku, dopóki nie zaktualizowałem wtyczki Eclipse ADT do najnowszej wersji (v22). Oczywiście zaktualizowałem także SDK. Nie widzę żadnych błędów kompilacji w środowisku Eclipse, ale kiedy uruchamiam projekt na telefonie, pojawia się błąd NoClassDefFoundError.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

Biblioteka arca jest zawarta w jednym z projektów bibliotecznych, do których się odwołuje (w folderze libs) i widzę ją w „Bibliotekach prywatnych Androida” w eksploratorze pakietów, jak już powiedziałem, bez błędów kompilacji. Projekt działa poprawnie na wszystkich komputerach, które nie zaktualizowały ADT.

Próbowałem już wielu rzeczy, w tym między innymi:

  • ponownie zainstaluj zestaw Android SDK
  • pobierz nowy pakiet ADT
  • usuń cały mój kod i pobierz go ponownie z git
  • skopiuj daną bibliotekę do projektu aplikacji
  • skomentuj kod korzystający z tej biblioteki - po prostu otrzymuję ten sam błąd dla następnej biblioteki

wszystko bez powodzenia, więc zaczynam się naprawdę rozpaczać.

Byłbym bardzo szczęśliwy, gdyby ktokolwiek mógł dać mi wskazówkę, jak rozwiązać ten problem.

Simon mówi
źródło

Odpowiedzi:

337

Cytując Streets of Boston z jego posta adt-dev :

Podczas aktualizacji „Zamówienie i eksport” nowych „prywatnych bibliotek Androida” nie zawsze jest sprawdzane. Android-support-v4.jar znajduje się teraz w tej sekcji „Prywatne biblioteki Androida”.

Aby to naprawić, przejdź do „Zamów i eksportuj” i zaznacz „Prywatne biblioteki Androida”. Następnie odśwież / wyczyść / odbuduj.

Po wykonaniu tej „poprawki” dla projektu bibliotecznego może być konieczne zamknięcie i ponowne otwarcie dowolnego zależnego projektu, ponieważ mogą oni nie zobaczyć tej „poprawki” od razu.

Daj temu szansę, a przy odrobinie szczęścia rozwiąże Twój problem.

wprowadź opis zdjęcia tutaj

CommonsWare
źródło
32
CommonsWare jest jak zawsze jednym z pierwszych pionierów, dziękuję bardzo! :)
Paul Wein
1
Bardzo nowa wersja ADT nowa niespodzianka;) Mam nadzieję, że nowy system kompilacji będzie lepszy. Dziękuję CommonsWare
lujop
3
Czy to tylko ja, czy też nie wydaje się niewłaściwe, aby każdy programista [korzystający z Eclipse i bibliotek] wszedł do wszystkich swoich projektów bibliotecznych i oznaczył „Prywatne biblioteki Androida” jako wyeksportowane? To sprawia, że ​​myślę, że wszyscy myliliśmy zamiar dodania przez Google tej nowej „funkcji” w pierwszej kolejności. Może nie powinniśmy oznaczać bibliotek jako wyeksportowanych. Może powinniśmy dodać brakujące pliki jar bezpośrednio do naszego folderu „libs”. Przykład: Pozwoliłoby to mojemu projektowi biblioteki na użycie najnowszego Androida-support-v4.jar [v13], podczas gdy ABS wewnętrznie używa android-support-v4-12.jar.
swooby
2
@swooby: „Czy to tylko ja, czy to źle, że każdy programista [korzystający z Eclipse i bibliotek] bierze udział we wszystkich swoich projektach bibliotecznych i oznacza„ Prywatne biblioteki Androida ”jako wyeksportowane?” - jest „zły”, o ile jest błędem, potwierdzonym przez osoby, które napisały narzędzia. „Może powinniśmy dodać brakujące pliki jar bezpośrednio do naszego folderu„ libs ”- och, ty też musisz to zrobić, tak jak robiłeś to w ciągu ostatniego roku i zmian. Jednak nadal musisz zaznaczyć to pole wyboru.
CommonsWare
9
@Phillip: AFAIK, to wszystko projekty. Dokładniej, jak sądzę, wszystkie projekty mają coś w sobie libs/, ale równie dobrze możesz to sprawdzić, na wypadek, gdybyś dodał coś do libs/kilku miesięcy później i zapomniał o tym.
CommonsWare
10

Po prostu sprawdzenie prywatnych bibliotek Androida nie wystarczyło, musiałem również zainstalować narzędzia do budowania zestawu SDK systemu Android w menedżerze zestawu SDK systemu Android.

Zaixer
źródło
Nie mogę potwierdzić, że jest to wymagane, ale nie zdałem sobie sprawy z błędu, który napotkał SimonSays przed jego zainstalowaniem. Może to wymagać jedynie odpowiedniego ustawienia pól wyboru eksportu, jak opisano powyżej, ale czułem, że powinienem wspomnieć, że zrobiłem to po drodze instalując Narzędzia kompilacji.
strangeluck
to działa dla mnie. sama zmiana preferencji zaćmienia nie jest wystarczająca. Może być konieczne sprawdzenie zainstalowanych narzędzi do budowania w menedżerze SDK Androida.
Stevens
4

Miałem również ten sam problem i mój adtbył 22.0.1. I żadne z powyższych rozwiązań nie zadziałało. Ponadto, dodając projekt biblioteki zewnętrznej do działającego projektu, zawsze sprawdzam genfolder projektu roboczego i jeśli Rjest tam projekt biblioteki zewnętrznej (wraz z nazwą pakietu), to eksportowany jest tylko projekt biblioteki zewnętrznej. A w moim genfolderze nie packagenamepokazano żadnej biblioteki zewnętrznej.

Sprawdziłem więc project.propertiesplik i nie było żadnego łącza do biblioteki zewnętrznej android.library.reference.1=. Więc ręcznie dodałem tam odwołanie do biblioteki zewnętrznej, mimo że dodałem project->properties->Java Build Path->Projects->Add. Więc ręczna edycja project.propertieszrobiła dla mnie całą pracę.

wprowadź opis zdjęcia tutaj

laaptu
źródło
1
Wydaje mi się, że tak się stało, ponieważ ustawieniem GUI nieandroid.library.reference.n jest , ale raczej -> -> -> -> . Haczyka . java build pathprojectpropertiesAndroidLibraryAdd...
n611x007,
4

Napotkałem podobny problem, spędziłem około 3 godzin, ale żadna z proponowanych tutaj decyzji nie pomogła ... Wreszcie znalazłem źródło problemu: moje pliki projektu i project.properties były tylko do odczytu. Eclipse po prostu dyskretnie ignoruje wszelkie zmiany w zależnościach bibliotek, gdy robię to w GUI!

RedSoft
źródło
3

Miałem ten sam problem. Stało się tak z powodu projektu zaćmienia. Aby go rozwiązać, stworzyłem nowy projekt w środowisku Eclipse, skopiowałem do niego moje istniejące klasy projektów i zasoby, a następnie ponownie uruchomiłem środowisko Eclipse i dodałem własne niestandardowe dołączenia.

Asaf Pinhassi
źródło
1
Za dużo kłopotów, rozwiązanie CommonsWare zadziałało dla mnie i wierzę, że zadziałałoby również dla ciebie.
Bilthon
2

Miałem podobny problem i moja odpowiedź różni się nieco od CommonsWare. Oto mój zrzut ekranu:

wprowadź opis zdjęcia tutaj

Po sprawdzeniu libs z powrotem w mojej kompilacji znów zaczął działać.

Gilson
źródło
2
Byłbym ostrożny z tym rozwiązaniem. Android Dependencieszostał zastąpiony przez Android Private Librariesi może nadal tam być ze względów starszych. Myślę, że można go usunąć w dowolnym momencie.
SimonSays
0

Miałem również ten sam problem,

i) dodaj gson lib jako odnośniki librairies
ii) sprawdź go w Javie Build Path http://i.stack.imgur.com/Gldhs.png

Jeremy Piednoel
źródło