我试图在Unity中加载共享库。它适用于Windows /编辑器,但不适用于Android,无论我做什么或用于库,我总是得到DllNotFoundException。
我正在使用lib.so文件,这些文件适用于32BIT ARM EABIS,因此跨平台编译似乎成功。
我的lib.so文件位于Assets/Plugins/Android/libs/armeabis-v7a/
文件夹中。
我为DllImport尝试了不同的语法(假设lib名为Plugin,文件为Plugin.dll和libPlugin.so):
[DllImport("Plugin")] => works for Windows only [DllImport("libPlugin.so")] => obviously wont work for Windows, but doesn't work for Android either.
如果我用winrar打开.apk,则libs位于libs/armeabis-v7a
文件夹中。
我用于测试的智能手机是带有armv8处理器的OnPlus3。
有人设法在Android上成功加载共享本机库吗?关于我做错了什么的任何想法?
谢谢
编辑:
插件代码可以在这里找到:https://github.com/FFmpeg/FFmpeg
在Unity项目中添加FFmpegInvoke.cs或生成FFmpeg.Autogen.dll并将其添加到项目中会产生相同的结果(dll只会使Unity项目更快构建)。
答案 0 :(得分:1)
我注意到你做错了几件事:
我的lib.so文件位于Asset / Plugins / libs / armeabis-v7a /文件夹中。
应该是:
Assets/Plugins/Android/libs/armeabi-v7a
如果您拥有该插件的x86架构版本,则应将它们放在:
Assets/Plugins/Android/libs/x86
我为DllImport尝试了不同的语法(假设调用了lib 插件,文件Plugin.dll和libPlugin.so):
这些都不正确。如果插件文件名是“libPlugin.so”,则应使用“Plugin”作为名称。
同样,如果插件名称是“libVideoPlayer.so”,则必须使用“VideoPlayer”。删除“lib”和“.so”。没有别的办法。
最后一点请注意,对于Android C ++插件,您无需导出插件。例如,DLLExport __declspec(dllexport)
不是必需的。
虽然,您必须将函数名称放在“extern "C"
”