2011-12-15 14 views
9

Mam aplikację na rynku Android iw raportach o awariach dostaję java.lang.UnsatisfiedLinkError ulega awarii i za każdym razem jest dla innego pliku .so.Dlaczego otrzymuję raporty o java.lang.UnsatisfiedLinkError z Market

błędy wygląda

java.lang.ExceptionInInitializerError 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load *****: findLibrary returned null 

lub

java.lang.ExceptionInInitializerError 
at java.lang.Thread.run(Thread.java:1019) 
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: alloc_mem_region[871]: OOPS: 116 cannot map library ********. no vspace available. 

lub

java.lang.UnsatisfiedLinkError: Couldn't load ******: findLibrary returned null 
at java.lang.Runtime.loadLibrary(Runtime.java:429) 
at java.lang.System.loadLibrary(System.java:554) 

Wygląda na niektórych urządzeniach nie można znaleźć pliki .so .. Katastrofa nie jest dla każdego szczególności plik .so. Mam około 4 plików .so w mojej aplikacji, a czasami zawiesza się o 1, a czasami zawiesza się na inną.

nigdy nie mogłem odtworzyć ten problem podczas testowania, chociaż ja testowałem na prawie wszystkie wersje Androida ...

Wszelkie wskazówki byłyby wysoko ceniona

Dzięki

+1

Pomyśl, czy to pomogłoby, gdybyś pokazał, jak je połączyć – Warpzit

+1

Just System.loadLibrary ("mylibrary"). Jak już wspomniałem w większości urządzeń nie ma problemów .. ale wciąż dostaję pewne raporty z rynku .. – Naveen

+0

Nie mogę jeszcze rozwiązać tego problemu, ale mam dodatkową informację, że przenoszenie aplikacji na kartę SD rozwiązuje problem na niektórych urządzeniach ... urządzenia, które znalazłem, to głównie urządzenia HTC, takie jak HTC Wildfire S ... Jakieś wskazówki? – Naveen

Odpowiedz

1

Znasz telefony i/lub wersje Androida, które powodują ten problem?

Jaka jest wielkość bibliotek? Być może uderzasz w limity pamięci starszych telefonów podczas ładowania bibliotek?

+0

To może być jeden z powodów ... Jak już powiedziałem, nie mogłem odtworzyć na żadnym z urządzeń, które mam, a dzienniki rynku Android nie podają informacji o urządzeniu ... – Naveen

5

Sam widziałem podobne problemy - wydaje się, że dotyczy to bardzo małej liczby użytkowników i nie mogę bezpośrednio powiązać ich z typami urządzeń lub systemami operacyjnymi. Z badań, które przeprowadziłem, znalazłem jednak dyskusję na temat Cyanogenmod Google Code page; aby szybko podsumować: wygląda na to, że niektóre kompilacje tego modu nie skopiowały dokładnie niektórych zmian wprowadzonych przez Google do bibliotek na poziomie systemu, co oznacza, że ​​niektóre symbole (na przykład: __android_log_print) mogą powodować błędy, w tym powodując niepowodzenie ładowania biblioteki.

Jestem w trakcie próbowania przypiąć to dalej, ale pomyślałem, że podzielę się tym, co mam do tej pory.

0

Może Alloc zbyt dużo pamięci w libxxxx.so

„spowodowane przez: java.lang.UnsatisfiedLinkError: Nie można załadować biblioteki: alloc_mem_region [871]: oops: 116 nie może odwzorowywać biblioteki * *. brak dostępnego vspace. "

0

Otrzymywałem raporty z rynku o UnsatisfiedLinkError, mimo że moja aplikacja działała dobrze w emulatorze i na kilku urządzeniach z Androidem, które mam do testowania. W pewnym momencie otworzyłem wygenerowane archiwum .apk i zauważyłem, że w kilku folderach libs/<ABI> brakuje jednej z połączonych bibliotek, których używam (.so). Okazało się, że urządzenia z Androidem z procesorami zdolnymi do obsługi arm64 załadują niektóre z połączonych bibliotek i ulegną awarii, gdy nie będą mogły znaleźć wersji arm64 jednej z bibliotek, z której korzysta moja aplikacja (zamiast cofać się do arm7v).

Podobny problem ze szczegółowymi jest wyjaśnione tutaj: https://realm.io/docs/java/latest/#couldnt-load-librealm-jniso

Krótko mówiąc, dodałem dodatkowej konfiguracji w moim kompilacji.Gradle, że wyklucza arm64:

android { 
    ndk { 
    abiFilters "armeabi", "armeabi-v7a", "x86" 
    } 
} 

Na marginesie - procesory arm64-V8A są zgodne z instrukcją ramienia v7a ustawiony i mogą uruchamiać 32-bitowe instrukcje kciuk, ale mieszanie bibliotek 64 i 32-bitowe nie jest dozwolony.

Powiązane problemy