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

Monogame Android项目集成FMOD遇JNI加载错误求助

Monogame + FMOD Android平台无音频:JNI_OnLoad未运行问题排查与解决

问题概述

项目基于Monogame开发,集成FMOD官方C# wrapper的Core与Studio API,DesktopGL平台运行正常,但导出Android后无音频输出:

  • 初始设备日志显示ERR_INTERNAL错误
  • 切换到日志版本libfmodL.so后,明确错误:

    [ERR] FMOD_JNI_GetEnv : JNI_OnLoad has not run, should have occurred during System.LoadLibrary

  • 当前配置:
    • 所有.so文件Build Action设为AndroidNativeLibrary
    • Android Binding项目中fmod.jar设为AndroidLibrary
  • 已尝试在Monogame Reddit社区求助,未获回复

排查与解决思路

1. 确保Native库提前加载

FMOD的JNI绑定依赖libfmod.so/libfmodL.so在C#代码初始化前完成加载,可在游戏启动最早期(比如Game.Initialize()之前)手动加载:

using System.Runtime.InteropServices;
using Java.Lang;

// 游戏启动入口处添加
JavaSystem.LoadLibrary("fmodL"); // 对应你使用的日志版本库

这样能确保JNI_OnLoad在FMOD的C# wrapper初始化前执行。

2. 验证Binding项目配置

  • 确认fmod.jar完整导入Binding项目,没有丢失JNI相关的类文件
  • 检查主Android项目是否已正确引用该Binding项目,在项目引用列表中确认存在

3. 核对ABI兼容性

  • 检查打包的.so文件是否包含目标设备的ABI架构(如arm64-v8a、armeabi-v7a),避免架构不匹配导致库加载失败
  • 在主Android项目的Android Options中,勾选对应ABI,确保与.so文件的架构一致

4. 检查FMOD初始化逻辑

确保Android平台的FMOD初始化参数正确,尤其注意JNI相关的初始化标志:

var initResult = FMOD.Core.System.Init(32, FMOD.Core.InitFlags.Normal, IntPtr.Zero);
if (initResult != FMOD.Core.Result.OK)
{
    // 输出详细错误便于排查
    Console.WriteLine($"FMOD初始化失败: {initResult}");
}

内容的提问来源于stack exchange,提问作者Code Watermelon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:53:14