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