如何访问 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 所述。
我有一个包含很多 .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 所述。