如何访问 android 项目 Xamarin 中的 .dll 或 .so 文件

How to access .dll or .so files in an android project Xamarin

我有一个包含很多 .so 文件的文件夹,我在代码 运行 时尝试使用这些文件。

我将它们放在一个名为 "External" 的文件夹中,然后我尝试像这样访问它们:

[DllImport("External\libvocon_ext_heap.so", EntryPoint = "ph_CreateWin32PrivateHeap", CallingConvention = CallingConvention.Cdecl)]
public static extern PH_ERROR ph_CreateWin32PrivateHeap(ref LH_HEAP_INTERFACE pHeapInterface, out IntPtr ppHeapInst);

我也试过将文件放在 Assets 文件夹中,但我仍然得到相同的 System.DllNotFoundException

你的so文件的build action设置为AndroidNativeLibrary了吗?

https://developer.xamarin.com/guides/android/advanced_topics/using_native_libraries/

这是一个迟到的答案,但我确实找到了解决问题的办法。主要问题是我如何在项目中存储库文件。为了找到库文件,它们必须存储在特定目录下。不是像我那样将它们存储在 "External" 目录中,而是必须将它们存储在名称为 "libs" 的目录和一个特定的子目录中,如下所示:

  • libs>armeabi>libfoo.so
  • libs>armeabi-v7a>libfoo.so
  • libs>x86>libfoo.so

因为 Android CPU 可以基于 3 种不同的 ARM 体系结构,因此必须为每种体系结构(armeabi、armeabi-v7a、x86)创建一个目录。我这样导入库文件:

[DllImport("libvocon_ext_heap.so", EntryPoint = "ph_CreateWin32PrivateHeap", CallingConvention = CallingConvention.Cdecl)]

你只需要写库文件的名字,它会自己找到正确的目录路径。您也可以像 "vocon_ext_heap" 这样写名称,因为它可以在缺少文件名时自动添加 "lib" 和“.so”。

我还 re-installed Xamarin SDK 管理器,因为我找到了一个可能的解决方案,要求 re-install 它,但我不知道它是否解决了与此问题相关的任何问题。此外,库当然必须构建为 AndroidNativeLibrary,如 Softlion 所述。