如何从android studio链接和调用prebuild静态本机库的功能

时间:2017-01-23 05:52:59

标签: android c++ ffmpeg android-ndk mp4parser

我需要改变音频的音高和时间。为此,我使用prebuild静态库。目前我有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)库,分别为视频和合并音频添加水印。任何人都可以从基础知识中获得帮助。

  1. 如何加载静态库?
  2. 我需要放置那个静态库吗?
  3. 我需要创建jni文件夹(文件夹结构)?
  4. 如何借助java代码的头文件调用该静态库中的函数?

1 个答案:

答案 0 :(得分:1)

你需要做几件事:

  1. 编译动态库。这是Android中的.so文件。 你可以使用android ndk。
  2. 来做到这一点
  3. 每个android项目都有一个目录,我是从头脑中说的,但我认为它位于jni子目录中,你必须放置你的库。
  4. 您应该将您的库包装在JNI中。将它们作为另一个问题的建议:JNI folder in Android Studio
  5. 如果你在android中有这样的东西:

    Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv * env,                                               jobject thiz)

  6. 其中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部分,以便在库之前加载它。