You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android .NET 8.0使用NDK时触发DLLNotFoundException问题求助

解决Android .NET 8.0中NDK .so文件加载失败(DLLNotFoundException)的方案
  • 确认.so文件命名规则
    .NET Android加载原生库时会自动拼接前缀lib和后缀.so,比如代码中写[DllImport("mylibrary")],实际查找的是libmylibrary.so。检查你的.so文件名是否符合这个规则,不要手动添加前缀或后缀。

  • 验证ABI配置与文件路径

    1. 打开项目的.csproj文件,确保AndroidSupportedAbis节点包含你存放.so文件的ABI类型,示例配置:
      <PropertyGroup>
        <AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
      </PropertyGroup>
      
    2. 确认.so文件存放路径为项目根目录\lib\<ABI>\(比如lib\arm64-v8a\libmylibrary.so),然后在Visual Studio中右键这些.so文件,设置生成操作为AndroidNativeLibrary,复制到输出目录为如果较新则复制。
  • 检查DllImport声明正确性
    确保DllImport的参数与原生库匹配,比如指定正确的调用约定、入口点(如果原生函数名有修饰),示例:

    [DllImport("mylibrary", CallingConvention = CallingConvention.Cdecl)]
    public static extern int MyNativeFunction();
    
  • 清理重建并验证输出目录

    1. 执行Build -> Clean Solution清理项目,再执行Build -> Rebuild Solution重建。
    2. 检查输出目录(如bin\Debug\net8.0-android\)下的lib\<ABI>目录,确认.so文件被正确复制到此处。
  • 确认NDK版本兼容性
    .NET 8.0建议使用NDK r25b及以上版本,在项目设置中核对NDK路径是否正确,也可直接在.csproj中指定:

    <PropertyGroup>
      <AndroidNdkDirectory>C:\Android\Sdk\ndk\25.2.9519653</AndroidNdkDirectory>
    </PropertyGroup>
    
  • 添加日志排查加载细节
    在MainActivity的OnCreate方法中添加日志代码,查看原生库加载的详细报错信息:

    Android.Util.Log.Debug("NativeLib", "Starting library load");
    try
    {
        // 调用原生函数触发加载
        MyNativeFunction();
    }
    catch (Exception ex)
    {
        Android.Util.Log.Error("NativeLib", $"Load failed: {ex.Message}\n{ex.StackTrace}");
    }
    

    查看Logcat输出,能获取更具体的加载失败原因。

内容的提问来源于stack exchange,提问作者Gurucharan Vijayakumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:52:39