nih*_*har 8 c++ android maui .net-maui
我们有一个针对每个平台构建的 C++ 库,即适用于 Windows 的 .dll、适用于 Android 的 .so 以及适用于 iOS 的 .a。尝试以下方法将 .so 文件包含在 Android 版 MAUI 应用程序中。(其他平台待定)-
Platforms -> Android -> lib -> arm64-v8a文件夹Build Action = AndroidNativeLibraryJavaSystem.LoadLibrary(lib name);但是,代码失败了
UnsatisfiedLinkError异常:dlopen失败:在Java.Interop.JniEnvironment.StaticMethods.CallStaticVoidMethod(JniObjectReference类型,JniMethodInfo方法,JniArgumentValue * args)中找不到库“lib name.so”在Java.Interop.JniEnvironment.StaticMethods.CallStaticVoidMethod(JniObjectReference类型) 、JniMethodInfo 方法、JniArgumentValue* args) 在 /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniEnvironment.g.cs:line 13250 at Java /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers 中的.Interop.JniPeerMembers.JniStaticMethods.InvokeVoidMethod(字符串编码成员,JniArgumentValue* 参数)。 JniStaticMethods.cs:第 41 行位于 /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net6.0/android- 中的 Java.Lang.JavaSystem.LoadLibrary(String libname) 31/mcw/Java.Lang.JavaSystem.cs:第339行
在 VS 输出窗口中,可以看到以下消息 -
“共享库‘库名称’未加载,p/invoke‘方法名称’可能会失败”
尝试移动 lib 目录,但没有成功。
我们在这里缺少什么?
还有使用现有 C++ 库的 MAUI 示例吗?支持真的足以满足生产使用吗?
--- 更新 --- 因此,放置 Android .so 文件的正确位置显然是<project root>\Resources\lib\arm64-v8a\
此外,复制到的任何内容<project root>\Resources\Raw都会直接复制到 Android asset 目录中。
现在,问题是 32 位 Windows dll 未被选中,因为 Maui Windows 应用程序默认为 64 位,我无法转换它。将发布另一个问题并链接到它。
所以 Android 的 .so 文件的正确位置显然是
<project root>\Resources\lib\<platform>\
所以对于arm64-v8来说,<project root>\Resources\lib\arm64-v8a\
(此外,复制到的任何内容<project root>\Resources\Raw都会直接复制到 Android asset 目录中。)
| 归档时间: |
|
| 查看次数: |
2310 次 |
| 最近记录: |