如何从AndroidStudio链接和调用预构建静态本机库的函数

如何从AndroidStudio链接和调用预构建静态本机库的函数,android,c++,ffmpeg,android-ndk,mp4parser,Android,C++,Ffmpeg,Android Ndk,Mp4parser,我需要改变音高和时间拉伸的音频。为此,我使用预构建静态库。目前我有libZtxAndroid。一个静态库和相应的头文件,其中包含函数声明。但我不知道如何在我的android studio应用程序中加载这个库,并从java代码中调用本机函数。我浏览了许多链接并尝试加载此库。但所有的尝试都失败了。这是我上次尝试的一个链接 我还在这个应用程序中使用FFMPEG共享库和MP4Parser()库分别为视频添加水印和合并音频。任何人都能从基础上有所帮助 如何加载静态库 我需要把静态库放在哪里 我需要在哪里创

我需要改变音高和时间拉伸的音频。为此,我使用预构建静态库。目前我有libZtxAndroid。一个静态库和相应的头文件,其中包含函数声明。但我不知道如何在我的android studio应用程序中加载这个库,并从java代码中调用本机函数。我浏览了许多链接并尝试加载此库。但所有的尝试都失败了。这是我上次尝试的一个链接

我还在这个应用程序中使用FFMPEG共享库和MP4Parser()库分别为视频添加水印和合并音频。任何人都能从基础上有所帮助

  • 如何加载静态库
  • 我需要把静态库放在哪里
  • 我需要在哪里创建jni文件夹(文件夹结构)
  • 如何借助java代码中的头文件调用该静态库中可用的函数

  • 您需要做几件事:

  • 编译一个动态库。这是Android中的一个.so文件。 您可以使用android ndk来实现这一点
  • 每一个android项目都有一个目录,我是从头开始说的,但我认为它位于jni子目录中,您必须在其中放置您的库
  • 您应该用JNI包装您的库。将其作为另一个问题中的建议:
  • 如果android中有类似的功能:

    Java_com_示例_hellojni_hellojni_stringFromJNI(JNIEnv*env, jobject thiz)

  • 如果Java_comp_example_hellojni_hellojni是您的项目名称,那么您必须使用Java,假设您的库的名称是libmylib。因此:

    public class HelloJni {
      static {
        System.LoadLibrary('mylib');
      }
    
      public native stringFromJni();
    }
    
    请注意,本机库名称不需要lib前缀和.so后缀。还要注意,你不需要任何来自C++的头文件,你只需从java中加载库并声明一个本机函数。在Java项目使用该库之前,该库应该已经编译并位于正确的目录中


    加载时要小心:如果使用标准库的共享版本,还需要将其添加到静态库中{在您的库之前,请使用Java进行加载。

    首先,您需要为armeabi-v7a编译代码,并为库调用制作JNI包装器。@GeorgeSovetov,您能否提供编译armeabi-v7a代码并制作JNI包装器的步骤/链接?老实说,我对此没有太多经验。您需要知道搜索什么。br一个Diago,我想你的答案是共享库(.so)。我需要使用静态库(.a)。您能帮我在android studio中加载此静态库并访问预构建静态库中的函数吗?加载静态库的方法是创建一个共享库,并使用android ndk将静态库链接到它,然后打开它。您不加载静态库。您只能在运行时加载。因此,库作为据我所知,没有人在android项目中加载静态库,以前从未见过。我使用了
    g++-shared-o libztx.so ZTX.o
    ld-r ZTX.o-o libztx.so
    命令来构建so库。但它在通用ELF中抛出
    ZTX.o:Relocations(EM:40)ZTX.o:Relocations(EM:40)ZTX.o:通用ELF中的重新定位(EM:40)ZTX.o:通用ELF中的重新定位(EM:40)ZTX.o:通用ELF中的重新定位(EM:40)ZTX.o:添加符号时出错:文件格式错误collect2:错误:ld在终端中返回了1个退出状态
    错误。您是否可以帮助从.a库中构建.so库。尝试使用可以用Android.mk和co构建的ndk项目。您将库列为对象文件:我不确定是否有问题,您可能缺少一些标志或steps。只需使用ndk build来确保您所做的事情是正确的。命令行可能不够。这也应该是相关的: