2012-01-11 15 views
5

Próbuję zbudować średniej wielkości projekt w Eclipse. Składa się z głównego projektu aplikacji i dwóch bibliotek Androida. Wszystko działało dobrze, dopóki nie dodałem do głównego projektu bardzo prostej biblioteki JNI.Biblioteka Android NDK: findLibrary zwróciło null

Po uruchomieniu aplikacji na urządzeniu widzę ten wyjątek w LogCat:

11/01 17: 19: 01.421: E/Android Runtime (26569) w java.lang.Runtime.loadLibrary (Runtime.java:429) nie można załadować xxx: findLibrary powrócił zerowy

google wokół podobnych problemów i wierzę, że zrobiłem wszystko poprawnie:

  1. Jedynym .c pliku i plik Android.mk są umieszczone w folderze „JNI”
  2. zbudować bibliotekę z NDK-build narzędzia
  3. biblioteki .so jest prawidłowo umieszczony w „libs \ armeabi” folderu
  4. widzę, że wynikowy plik apk rzeczywiście zawierają mojego natywną bibliotekę

Kiedy tworzę projekt testowy i link do tego samego kodu natywnego - to działa dobrze. Problem pozostaje w głównym projekcie. Już próbowałem stworzyć projekt Eclipse od podstaw, ale to nie pomogło

Używam Android SDK Tools V.16

Czy ktoś może mi pomóc z sugestią?

Dzięki!

Odpowiedz

4

OK, po dwóch dniach walki z Android SDK udało mi się rozwiązać mój problem. Oto kilka wyjaśnień na wypadek, gdyby pomogło komukolwiek innemu.

Moja poprzednia struktura projektu:

  1. projekt Android LIB1 (z własnym kodem JNI)
  2. projekt
  3. Android Lib2 (zależy LIB1)
  4. projekt Apl1 (zależy LIB2)
  5. Apl2 projekt (z własnym kodem jni, zależy od Lib2)

Pierwotny problem został zaobserwowany, gdy próbowałem załadować bibliotekę jni ary w App2. Nadal nie rozumiem, co powstrzymało środowisko wykonawcze od znalezienia jni w App2.

Jednak rozwiązaniem było usunięcie projektu Lib1 z obszaru roboczego i dodanie go jako pliku JAR do Lib2 i obu aplikacji. Teraz mogę wreszcie załadować bibliotekę jni w App2.

+1

Czy możesz wyjaśnić, co masz na myśli? Obecnie mam ten sam problem, ale jestem zdezorientowany przez twoją konfigurację. Mam pojedynczy projekt Android w zależności od pojedynczej biblioteki JNI, w której znajduje się tylko jeden plik .c/.h. – JuiCe

+0

@JuiCe Myślę, że twój problem nie jest związany z tym, czego doświadczyłem. Mój problem został spowodowany przez próbę załadowania biblioteki JNI znajdującej się w projekcie biblioteki Androida. Powinieneś sprawdzić inne posty na ten temat. – Anton

+0

Ale działa, dziękuję za odpowiedź. – JuiCe