Android multidex, UnsatisfiedLinkError - не удалось найти файл .so


Answers

Для этого есть элегантное решение. Когда ваш файл APK не содержит все собственные библиотеки в 64-битной версии для определенного ABI, вам просто нужно убедиться, что ваш файл APK не содержит 64-битных библиотек. Ниже приведено руководство по настройке вашего проекта, чтобы исправить это: https://corbt.com/posts/2015/09/18/mixing-32-and-64bit-dependencies-in-android.html

Фон. Когда ваше приложение установлено на 64-битных устройствах ABI, диспетчер пакетов сканирует файл APK при установке и ищет 64-разрядные собственные библиотеки. Если он найдет подходящую папку с 64-битной библиотекой (вы можете проверить папку / libs в вашем файле APK, если вы откроете ее любым клиентом zip), предполагается, что все собственные библиотеки доступны в 64-разрядных версиях. Если одна или несколько собственных библиотек недоступны в 64-битной версии, менеджер пакетов не сможет загрузить свою 32-битную версию. Следовательно, когда приложение пытается запустить код, который опирается на эти родные librairies, вы получите это сообщение UnsatisfiedLinkError. Это означает, что 32-битная версия вашей библиотеки

Question

Я пытаюсь добавить некоторый lib (.jar & .so) в мой проект multidex в студии Android.

когда я добавляю только несколько банок в проект, все работает нормально. в случае, если я добавляю все больше и больше банок (другие библиотеки), я получаю эту ошибку:

java.lang.UnsatisfiedLinkError:
  dalvik.system.PathClassLoader[DexPathList[[zip file
  "/data/app/com.test.digital.ocrtest-2/base.apk"],nativeLibraryDirectories=[/data/app/com.test.digital.ocrtest-2/lib/arm,
  /data/app/com.test.digital.ocrtest-2/base.apk!/lib/armeabi-v7a,
  /vendor/lib, /system/lib]]] couldn't find
  "libScanovatePassportAndIDLSDK_CPP.so"

любая идея, как я могу сказать компилятору, чтобы создать банку и так в одном и том же десктопе?