Я использовал flutter для создания приложения для Android, которое использует jniLibs, я не использую ffi, вместо этого я напрямую вызываю .so lib с помощью Process.run из ownLibDirectory. Он отлично работает в режиме отладки, в режиме выпуска я получаю исключение процесса, что файл ****.so не найден. Когда я распаковываю выпущенный файл apk, я вижу, что все библиотеки присутствуют в папке «libs», но после установки apk я вижу, что они отсутствуют в NativeLibDirectory приложения (в режиме отладки он представлен = успешно извлечен).Насколько я знаю, причиной такого поведения является появление в Android 6 возможности хранить собственные библиотеки в несжатом виде в .apk, а также возможность загружать эти собственные библиотеки из .apk без необходимости отдельного копия файловой системы собственных библиотек.
Я уже добавлен в AndroidManifest.xml "android:extractNativeLibs="true"", но это ничего не изменило.
Я также пытался добавить в build.gradle эти параметры (и их комбинации), но они все равно не работают, как указано:
Код: Выделить всё
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
}
===
packagingOptions {
jniLibs {
useLegacyPackaging = true
}
}
===
sourceSets {
main {
jniLibs.srcDirs = ['libsrc/main/jniLibs']
}
}
Как заставить Android извлекать библиотеки в ownLibDirectory, а не хранить их только в base.apk? Как я уже говорил, он отлично работает в режиме отладки, а не в режиме выпуска.
Подробнее здесь:
https://stackoverflow.com/questions/788 ... id-flutter