java.lang.UnsatisfiedLinkError - неправильный каталог искал собственные библиотеки

В своем приложении я использую Android NDK для создания библиотек для armeabi-v7a, arm64-v8a, x86 и x86_64 ABI. Я загружаю библиотеки в виде пакета в Google Play.

На некоторых устройствах я получаю следующую ошибку

Fatal Exception: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/my-package-name-1/base.apk"],nativeLibraryDirectories=[/data/app/my.package.name-1/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libc++_shared.so"

Я проверил содержимое загруженного пакета, и он определенно содержит libc++_shared.so для вышеупомянутых ABI.

Похоже, что искомый каталог неверен "../lib/arm". Я не добавлял поддержку устаревших ABI (mips, armeabi), но я не помню, чтобы было что-то под названием "arm".

Как я могу решить эту проблему?

Обновление: явное указание поддерживаемых ABI в файле gradle не помогло. Я снова проверил, присутствует ли libc++_shared.so внутри файла пакета (для каждого ABI), прежде чем загружать его в магазин воспроизведения, и снова не было пропущенных файлов.

Еще одна странная вещь, которую я заметил, это то, что на одного пользователя приходится много сбоев (+10 на пользователя). Я нахожу это немного странным, потому что без библиотек приложение не может работать (даже не запускаться). И если бы я запускал приложение, которое сразу же вылетало или вообще не работало, я бы удалял его, вероятно, после первой неудачной попытки.

Спасибо


person roman    schedule 18.07.2019    source источник
comment
Это может быть связано с stackoverflow.com/questions/56982270/ . Попробуйте сделать пакеты пакетов adb shell и dumpsys | grep your_package_name и проверьте, какой у вас legacyNativeLibraryDir/CPU_ARCH.   -  person Shailendra Suriyal    schedule 19.07.2019
comment
legacyNativeLibraryDir просто заканчивается на /lib, что кажется правильным. Во всяком случае, это не крашится на моих устройствах. Только на устройствах, к которым у меня нет доступа.   -  person roman    schedule 19.07.2019
comment
@roman ты нашел правильное решение?   -  person fillobotto    schedule 01.04.2021


Ответы (1)


Проверьте, копируются ли ваши сборки jni в библиотеки вместо jniLibs. если да, скопируйте содержимое из libs в jniLibs.

Проверьте этот пост

person Shailendra Suriyal    schedule 19.07.2019
comment
Я заметил, что когда я включаю Firebase Crashlytic и не указываю целевые собственные ABI явно в gradle (ndk { abiFilters ..}), система сборки создает папку armeabi, которая содержит только libcrashlytics.so, а не другие мои библиотеки. Может ли каталог ../lib/arm использоваться для armeabi? Придется некоторое время следить за этим, чтобы увидеть, не произойдет ли сбой после моих последних изменений, когда я указал точные ABI в gradle. Спасибо за ваши предложения - person roman; 19.07.2019