我需要更改音频的音高和时间拉伸(stretch)。为此,我正在使用预构建静态库。当前,我有libZtxAndroid.a静态库和包含函数声明的相应头文件。但是我不知道如何在我的android studio应用程序中加载该库并从Java代码调用本机函数。我浏览了许多链接,并尝试加载该库。但是所有尝试都失败了。这是我上次尝试过的链接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 * env,
    jobject thiz)

  • 其中Java_comp_example_hellojni_HelloJni是您的项目名称,您必须从Java开始,假设您的lib名称是libmylib.so:
    public class HelloJni {
      static {
        System.LoadLibrary('mylib');
      }
    
      public native stringFromJni();
    }
    

    请注意,本机库名称不需要lib前缀和.so后缀。还要注意,您不需要C++的任何头文件,只需从Java加载该库并声明一个本机函数即可。在Java项目使用该库之前,该库应该已经被编译并位于正确的目录中。

    加载时要小心:如果使用标准库的共享版本,则还需要在库之前将其添加到Java的static {部分中以进行加载。

    10-07 19:13
    查看更多