Как указано в руководстве по Android ABI: https://developer.android.com/ndk/guides/abis
Раздел Автоматическое извлечение собственного кода во время установки гласит:
При установке приложенияслужба менеджера пакетов сканирует APK и ищет все общие библиотеки в форме:
lib/<primary-abi>/lib<name>.so
Если ничего не найдено, и вы определили вторичный ABI, службасканирует общие библиотеки в форме:
lib/<secondary-abi>/lib<name>.so
Справочная информация: Мое приложение зависит от внешней библиотеки, доступ к которой осуществляется через интерфейс JNI, но я былпредоставляется только с файлом, например libLibrary.so
для архитектуры armeabi.Мое приложение также использует другую библиотеку, которая поддерживает несколько различных архитектур, таких как arm64-v8a и т. Д. Итак, во время выполнения я получил такую ошибку, потому что не смог найти libLibrary.so
:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[... /system/lib64]]] couldn't find "libLibrary.so"
Edit:
Мне было интересно хорошо ли я скопировал libLibrary.so
из папки armeabi в папку armeabi-v7a , когда другие библиотеки, от которых я зависел, имеют .so файлы для armeabi-v7a, но не для armeabi.Я проверил свое приложение, и оно без проблем использует библиотеку, когда я установил в gradle:
ndk.abiFilters "armeabi-v7a"
, чтобы выводить только библиотеки armeabi-v7a в файле apk для использования приложениятолько их.
Итак, мне интересно, так ли это хорошо.Я использую то, что предлагается здесь: https://medium.com/livefront/native-android-libraries-gone-bad-e7ff63f34bb