Android Встроенные библиотеки NDK на устройствах, но отлично работают в эмуляторе - PullRequest
0 голосов
/ 26 апреля 2020

Я хочу сделать вычисления DSP по нативному коду. Это хорошо работает в эмуляторе (Android 4.2.2). Но на некоторых устройствах (Android 7 и 9) библиотека, созданная NDK, позволяла приложению создавать sh непосредственно при выполнении System.loadLibrary . Но: загруженная библиотека загружается без проблем, когда я помещаю ее в свой APK.

Признаюсь, для основного приложения я использую старую Eclipse IDE в Windows, ориентированную на API 26. Мой NDK - маленький R7, работающий на Ubuntu. Но моя библиотека выполняет вычисления только для байтовых массивов в стандартном c, здесь нет доступа к Android.

Собственный код компилируется без предупреждений и ошибок и построен для armeabi и armeabi-v7a. В APK файлы libxyz.so находятся в правильных папках. Имена функций экспорта должны быть правильными. Но даже если для них нет объявлений в классе Java и не вызывается ничего нативного, cra sh напрямую возникает в static { System.loadLibrary("libxyz.so"); }

Могут ли мои двоичные файлы lib быть несовместимыми?

Спасибо за любую помощь!

Обновление: Библиотеки действительно были несовместимы, см. Комментарии ниже.

1 Ответ

0 голосов
/ 06 мая 2020

Наконец я смог прочитать logcat с устройства (по командной строке adb, в Eclipse это не работало). Кажется, проблема вызвана «перемещением текста» в двоичных файлах.

Logcat: "java .lang.UnsatisfiedLinkError ... ошибка dlopen ... libxyz.so имеет перемещения текста"

Обновление до новой версии NDK (9) исправило ошибку TEXTREL. Теперь System.loadLibrary и вызов собственных методов работает на более новых API. Поэтому мне пришлось установить 1,4 ГБ NDK для расчета в стандарте c.

...