Почему я получаю отчеты о java.lang.UnsatisfiedLinkError с Маркета - PullRequest
9 голосов
/ 15 декабря 2011

У меня есть приложение на рынке Android, и в его отчетах о сбоях я получаю java.lang.UnsatisfiedLinkError аварийно завершает работу, и каждый раз это происходит для другого файла .so.

ошибки выглядят как

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

или

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.

или

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)

Похоже, что некоторые устройства не могут найти некоторые файлы .so. Сбой не для какого-либо конкретного файла .so. У меня в приложении около 4 .so файлов, и иногда оно падает на 1, а иногда на другое.

Я никогда не мог воспроизвести эту проблему во время тестирования, хотя я тестировал почти на всех версиях Android ...

Любые указатели будут высоко оценены

Спасибо

Ответы [ 4 ]

5 голосов
/ 20 октября 2012

Я сам сталкивался с подобными проблемами - похоже, это затрагивает очень небольшое количество пользователей, и я не могу напрямую соотнести его с типами устройств или операционными системами. Однако из проведенного исследования я обнаружил обсуждение на Cyanogenmod Google Code page ; чтобы быстро подвести итог: кажется, что некоторые сборки этого мода точно не скопировали некоторые изменения, сделанные Google в библиотеки системного уровня, что означает, что некоторые символы (например, __android_log_print) могут вызывать ошибки, в том числе приводить к сбою загрузки вашей библиотеки .

Я пытаюсь объяснить это дальше, но я решил поделиться тем, что у меня есть на сегодняшний день.

1 голос
/ 26 декабря 2011

Знаете ли вы телефоны и / или версии Android, которые вызывают эту проблему?

Какой размер библиотек? Может быть, вы загружаете библиотеки старыми телефонами?

0 голосов
/ 25 ноября 2015

Я получал отчеты из Маркета о UnsatisfiedLinkError, хотя мое приложение работало нормально в эмуляторе и на нескольких устройствах Android, которые у меня есть для тестирования. В какой-то момент я открыл сгенерированный архив .apk и заметил, что в некоторых папках libs/<ABI> отсутствует одна из используемых мной связанных библиотек (файл .so). Оказалось, что устройства Android с процессорами, поддерживающими arm64, будут загружать некоторые связанные библиотеки и аварийно завершать работу, когда им не удается найти версию одной из библиотек arm64, которую использует мое приложение (вместо возврата к arm7v).

Подобная проблема с более подробной информацией объясняется здесь: https://realm.io/docs/java/latest/#couldnt-load-librealm-jniso

Короче говоря, я добавил дополнительную конфигурацию в свой build.gradle, исключая arm64:

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

В качестве примечания: процессоры arm64-v8a совместимы с набором команд arm-v7a и могут выполнять 32-битные инструкции Thumb, но смешивание 64- и 32-битных библиотек недопустимо.

0 голосов
/ 16 января 2013

Возможно, вы выделяете слишком много памяти в libxxxx.so

"Причина: java.lang.UnsatisfiedLinkError: Невозможно загрузить библиотеку: alloc_mem_region [871]: OOPS: 116 не удается сопоставить библиотеку **. Нет доступного пространства. "

...