我需要更改音频的音高和时间拉伸(stretch)。为此,我正在使用预构建静态库。目前我有 libZtxAndroid.a 静态库和包含函数声明的相应头文件。但我不知道如何在我的 android studio 应用程序中加载这个库并从 java 代码调用 native 函数。我探索了许多链接并尝试加载这个库。但是所有的尝试都失败了。这是我上次试过的一个链接https://tariqzubairy.wordpress.com/2012/03/12/use-of-prebuild-static-library-compiled-with-android-toolchain/
我还在这个应用程序中使用 FFMPEG 共享库和 MP4Parser ( https://github.com/sannies/mp4parser ) 库分别为视频添加水印和合并音频。任何人都可以从基础上提供帮助。
- 如何加载静态库?
- 我需要在哪里放置静态库?
- 我需要在哪里创建 jni 文件夹(文件夹结构)?
- 如何在 java 代码的头文件的帮助下调用该静态库中可用的函数?
最佳答案
你需要做几件事:
- 编译动态 库。这是 Android 中的 .so 文件。 您可以使用 android ndk 执行此操作。
- 在每个 android 项目中都有一个目录,我是从头顶说的,但我认为它在一个 jni 子目录中,您必须将您的库放在该目录中。
- 您应该用 JNI 包装您的库。将它们作为其他问题的建议:JNI folder in Android Studio
如果你在 android 中有这样的东西:
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* 环境, 工作主题 )
其中 Java_comp_example_hellojni_HelloJni 是您的项目名称,您必须从 Java 执行,假设您的库名称是 libmylib.so:
public class HelloJni {
static {
System.LoadLibrary('mylib');
}
public native stringFromJni();
}
请注意, native 库名称不需要 lib 前缀和 .so 后缀。另请注意,您不需要任何来自 C++ 的头文件,您只需从 Java 加载库并声明一个 native 函数。在 Java 项目使用它之前,该库应该已经编译并位于正确的目录中。
加载时要小心:如果您使用标准库的共享版本,您还需要将它添加到 Java 中的 static { 部分以加载它,在您的库之前。
关于android - 如何从android studio链接和调用预构建静态 native 库的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800007/