Dodawanie biblioteki / pliku JAR do projektu Eclipse dla systemu Android

130

To jest dwuczęściowe pytanie dotyczące dodawania biblioteki innej firmy (JAR) do projektu systemu Android w Eclipse.

Pierwsza część pytania jest taka, że ​​kiedy próbuję dodać plik JAR (bibliotekę) innej firmy do mojego projektu na Androida, najpierw pojawia się problem

Błąd podczas analizowania XML: niepowiązany prefiks

ponieważ próbuję użyć klasy z tego pliku JAR (i potrzebuję prefiksu w jakiś sposób zdefiniowanego). Co się dzieje?

Po drugie (po naprawieniu tego - odpowiedź jest podana poniżej) moja aplikacja nie działa na Androidzie i poprzez debuger (LogCat) odkrywam, że klasa, którą próbuję skonsumować, nie istnieje.

Przyczyna: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

Dlaczego, kiedy nie otrzymuję błędu kompilacji lub konsolidatora w Eclipse, czy występuje ten problem w emulatorze?

Te dwa pytania są retoryczne, ponieważ odpowiem na nie poniżej. Inne posty na tym forum docierają do problemu, a gdzie indziej jest dyskusja, ale czuję, że mogę być bardziej pomocny dla następnego gościa.

Russ Bateman
źródło

Odpowiedzi:

316

Teraz przejdźmy do problemu brakujących klas.

Jestem programistą Eclipse Java EE i od wielu lat mam w zwyczaju dodawanie bibliotek innych firm za pomocą mechanizmu „User Library” w Build Path. Oczywiście są co najmniej 3 sposoby dodania biblioteki innej firmy, ta, której używam, jest moim skromnym zdaniem najbardziej eleganckim.

Nie zadziała to jednak w przypadku Androida, którego „JVM” z Dalvik nie może obsłużyć zwykłej klasy skompilowanej w Javie, ale musi zostać przekonwertowane na specjalny format. Nie dzieje się tak, gdy dodajesz bibliotekę w sposób, w jaki tego nie robię.

Zamiast tego postępuj zgodnie z (powszechnie dostępnymi) instrukcjami importowania biblioteki innej firmy, a następnie dodawania jej za pomocą ścieżki budowania (dzięki czemu jest ona znana Eclipse do celów kompilacji). Oto krok po kroku:

  1. Pobierz bibliotekę do systemu programowania hosta.
  2. Utwórz nowy folder libs w swoim projekcie Eclipse / Android.
  3. Kliknij prawym przyciskiem myszy libs i wybierz Importuj -> Ogólne -> System plików, a następnie Dalej, Przeglądaj w systemie plików, aby znaleźć katalog nadrzędny biblioteki (tj. Gdzie ją pobrałeś).
  4. Kliknij OK, a następnie kliknij nazwę katalogu (nie pole wyboru) w lewym okienku, a następnie zaznacz odpowiedni plik JAR w prawym panelu. Spowoduje to umieszczenie biblioteki w Twoim projekcie (fizycznie).
  5. Kliknij prawym przyciskiem myszy projekt, wybierz opcję Build Path -> Configure Build Path, a następnie kliknij kartę Libraries, a następnie Add JARs ..., przejdź do nowego pliku JAR w katalogu libs i dodaj go. (Nawiasem mówiąc, jest to moment, w którym nowy plik JAR jest konwertowany do użytku w systemie Android).

UWAGA

Krok 5 może nie być potrzebny, jeśli biblioteka jest już uwzględniona w ścieżce kompilacji. Po prostu upewnij się, że jego istnienie jest pierwsze przed dodaniem.

To, co tu zrobiłeś, zapewnia dwie rzeczy:

  1. Zawiera plik JAR przekształcony w Dalvik w projekcie Android.
  2. Udostępnia definicje Java dla Eclipse w celu znalezienia klas innych firm podczas opracowywania (czyli kompilowania) kodu źródłowego projektu.
Russ Bateman
źródło
Russ, prawdopodobnie powinieneś zacząć inne osobne pytanie. Ta „odpowiedź” wygląda tutaj dziwnie.
Paul Gregoire,
3
Więc trochę przepisałem część pytania. Oparłem się pokusie zrobienia prostej rzeczy (co sugerujesz tutaj), ponieważ naprawdę uważam, że oba problemy wynikają z próby dodania biblioteki innej firmy i stawiam na to, że każdy, kto ma drugi problem, prawdopodobnie miał pierwszy też. Dzięki.
Russ Bateman
Chciałbym, żeby było coś bardziej wyraźnego na ten temat w oficjalnych dokumentach Androida (jeszcze się na to nie natknąłem) i inne odpowiedzi na innych forach podchodzą do tego, ale nigdy nie zauważają problemu. Zauważ, że na BlackBerry ten sam problem jest ogromnym koszmarem, w którym nikt nie podaje wiarygodnych informacji, jak go rozwiązać - nie wiem, co tam zrobię.
Russ Bateman
2
Cześć @RussBateman Wypróbowałem kroki, o których wspomniałeś powyżej, i udało mi się dołączyć jar biblioteki do mojego projektu na Androida, więc klasy biblioteki były dostępne dla mojego projektu w czasie kompilacji, ale kiedy uruchamiam projekt, pojawia się błąd w mojej konsoli: „Konwersja do formatu Dalvik nie powiodła się z powodu błędu 1”… i mój projekt nie został uruchomiony!
Zeba
W pewnych okolicznościach to nie działa ... Nie pamiętam dokładnie, co zrobiłem, usunąłem folder libs, przeczytałem go ... teraz zrobiłem wszystko, co powiedziałeś, dodaj biblioteki, zaimportuj jar, dodaj do ścieżki kompilacji ... .. błędy kompilatora zniknęły, ale nadal występuje wyjątek w czasie wykonywania, że ​​klasa nie została znaleziona :(
Ixx
20

Upewnij się, że pliki JAR innych firm znajdują się w folderze „libs” projektów i zostaną umieszczone w pliku .apk podczas pakowania aplikacji. Możesz zobaczyć błędy uruchomieniowe na urządzeniu, jeśli coś w słoiku nie jest obsługiwane, ale poza tym odniosłem wielki sukces.

Paul Gregoire
źródło
1
Chodzi o doświadczenie, miałem ten sam problem wcześniej :)
Paul Gregoire
Dzięki Sir, ale do bani jest widzieć, że folder libs potrzebuje kopii zewnętrznych plików Jar, które mamy już w repozytorium Maven lub gdzieś.
asgs
1
Niestety, to już nie działa automatycznie, musisz także powiedzieć eclipse, aby włączył biblioteki do plików pakietów.
Neil Townsend
Kiedy to się zmieniło? To ogromna zmiana w stosunku do tego, do czego wszyscy jesteśmy przyzwyczajeni.
Paul Gregoire
5

Konfigurowanie projektu bibliotecznego

Projekt biblioteki to standardowy projekt systemu Android, więc możesz utworzyć nowy w taki sam sposób, jak nowy projekt aplikacji.

Podczas tworzenia projektu biblioteki możesz wybrać dowolną nazwę aplikacji, pakiet i ustawić inne pola według potrzeb, jak pokazano na rysunku 1.

Następnie ustaw właściwości projektu, aby wskazać, że jest to projekt biblioteczny:

W Eksploratorze pakietów kliknij prawym przyciskiem myszy projekt biblioteki i wybierz opcję Właściwości. W oknie Właściwości wybierz grupę właściwości „Android” po lewej stronie i znajdź właściwości Biblioteki po prawej stronie. Zaznacz pole wyboru „to biblioteka” i kliknij Zastosuj. Kliknij OK, aby zamknąć okno Właściwości. Nowy projekt jest teraz oznaczony jako projekt biblioteki. Możesz rozpocząć przenoszenie kodu źródłowego i zasobów do niego, jak opisano w poniższych sekcjach.

koke
źródło
4

Jeśli używasz narzędzia ADT w wersji 22, musisz sprawdzić zależności systemu Android i biblioteki prywatne systemu Android na karcie zamówienia i eksportu w ścieżce kompilacji projektu

ajaykoppisetty
źródło
2

Po pierwsze, problem z brakującym przedrostkiem.

Jeśli korzystasz z czegoś w pliku układu, który pochodzi od strony trzeciej, może być konieczne użycie również jego przedrostka, coś w rodzaju „droidfu:”, które występuje w kilku miejscach w konstrukcji XML poniżej:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

To wychodzi z JAR, ale musisz też dodać nowe „xmlns: droidfu”

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

lub otrzymasz błąd niezwiązanego prefiksu. Dla mnie był to błąd podczas kopiowania i wklejania całego dostarczonego przykładu ze stron biblioteki zewnętrznej.

Russ Bateman
źródło
1

Błąd podczas analizowania XML: niepowiązany prefiks

Zasób „/ playteddy / res” nie istnieje.

Mam powyższe dwa błędy i ostatecznie rozwiązałem.

Kliknij prawym przyciskiem myszy swój projekt -> właściwości -> ścieżka budowania java -> googleadmobadsdk (wybierz i umieść na górze), a następnie uruchom i problem rozwiązany. Zostało rozwiązane mój błąd wykonania.

sujan
źródło
0

Umieść źródło w folderze poza swoim obszarem roboczym. Kliknij prawym przyciskiem myszy w eksploratorze projektów i wybierz „Importuj ...”

Zaimportuj projekt do obszaru roboczego jako projekt systemu Android. Spróbuj go zbudować i upewnij się, że jest oznaczony jako projekt biblioteczny. Upewnij się również, że jest zbudowany z obsługą interfejsu API Google, jeśli nie, wystąpią błędy kompilacji.

Następnie kliknij prawym przyciskiem myszy swój główny projekt w eksploratorze projektów. Wybierz właściwości, a następnie wybierz Android po lewej stronie. W sekcji biblioteki poniżej kliknij „Dodaj”.

Biblioteka dymków mapview powinna być teraz dostępna do dodania do projektu.

Leander
źródło
0

Przejdź do ścieżki budowania w zaćmieniu, następnie kliknij kolejność i eksportuj, a następnie sprawdź bibliotekę / jar, a następnie kliknij przycisk w górę, aby przenieść ją na górę listy i najpierw skompilować.

Sam Adamsh
źródło