Я работаю над приложением Android, которое будет вызывать файл .so, созданный другим приложением Android NDK.
Я создал следующую структуру папок в своем проекте и скопировал поверх файлов .so, как виднониже:
|--app:
|--|--src:
|--|--|--main
|--|--|--|--jniLibs
|--|--|--|--|--armeabi
|--|--|--|--|--|--libmylib.so
|--|--|--|--|--x86
|--|--|--|--|--|--libmylib.so
Я вызываю эту библиотеку через свое приложение с помощью следующего кода:
static {
System.loadLibrary("mylib");
}
Затем я вызываю метод из этого общего объекта с помощью следующего кода:
String str = stringFromJNI();
Это не работает, так как программа ищет искаженное имя функции следующим образом:
com.example.androidlibcall.MainActivity.stringFromJNI (), где моя .so функция будет использовать другое имя пакета иследовательно, генерируется другое имя функции.Я не совсем уверен, что мне нужно делать, чтобы вызывать функции из внешней библиотеки, я предполагаю, что могу создать свою собственную библиотеку и использовать dlopen () для загрузки внешней библиотеки и выполнения вызовов к ней, но мне было интересно, есть лидругие способы добиться этого или нет.
Моя конечная цель - создавать приложения, которые могут вызывать уже существующие библиотеки на мобильном устройстве, но, поскольку я новичок в NDK / Android, я не являюсьуверен, что это лучший метод для этого и не нашел хороших примеров для работы.Похоже, что многие из ранее существовавших аналогичных вопросов касаются более старых версий Android Studio, которые больше не подходят.
Я использую последнюю версию Android Studio (3.1.2) с Gradle 4.4.на компьютере с Windows 7.
Пожалуйста, сообщите.
Спасибо!