Как связать и вызвать функцию предварительной сборки статической нативной библиотеки из андроид студии

Мне нужно изменить тональность и время растяжения звука. Для этого я использую предварительно собранную статическую библиотеку. В настоящее время у меня есть статическая библиотека libZtxAndroid.a и соответствующий заголовочный файл, который содержит объявление функции. Но я не знаю, как загрузить эту библиотеку в мое приложение для Android и вызвать нативную функцию из кода Java. Я исследовал много ссылок и попытался загрузить эту библиотеку. Но все попытки провалились. Это одна ссылка, которую я пробовал в прошлый раз https://tariqzubairy.wordpress.com/2012/03/12/use-of-prebuild-static-library-compiled-with-android-toolchain/

Также я использую общую библиотеку FFMPEG и MP4Parser (https://github.com/sannies/mp4parser) библиотека в этом приложении для добавления водяного знака к видео и слияния аудио соответственно. Может ли кто-нибудь помочь от основ.

  1. Как загрузить статическую библиотеку?
  2. Где мне нужно разместить эту статическую библиотеку?
  3. Где мне нужно создать папку jni (структура папок)?
  4. Как вызвать функцию, доступную в этой статической библиотеке с помощью файла заголовка из кода Java?

2

Решение

Вам нужно сделать несколько вещей:

  1. Составить динамический библиотека. Это файл .so в Android.
    Вы можете сделать это с помощью Android ndk.
  2. В каждом андроид-проекте есть директория, я говорю изо всех сил, но я думаю, что она находится в подкаталоге jni, куда вы должны поместить свою библиотеку.
  3. Вы должны обернуть свою библиотеку в JNI. Поместите их как совет в этом другом вопросе: Папка JNI в Android Studio
  4. Если у вас есть что-то подобное в Android:

    Java_com_example_hellojni_HelloJni_stringFromJNI (JNIEnv * env,
    задание это)

где Java_comp_example_hellojni_HelloJni — это имя вашего проекта, вы должны сделать это с Java, предполагая, что имя вашей библиотеки libmylib.so:

public class HelloJni {
static {
System.LoadLibrary('mylib');
}

public native stringFromJni();
}

Обратите внимание, что собственное имя библиотеки не требует префикса lib и суффикса .so. Также обратите внимание, что вам не нужен заголовочный файл из C ++, вы просто загружаете библиотеку из Java и объявляете встроенную функцию. Библиотека должна быть уже скомпилирована и находиться в правильном каталоге, прежде чем ее будет использовать проект Java.

Будьте осторожны при загрузке: если вы используете совместно используемую версию стандартной библиотеки, вам также необходимо добавить ее в статический {раздел Java для загрузки, перед вашей библиотекой.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]