Unity升级后Flutter-Unity集成出现NoSuchFieldError问题求助
解决Unity 2021升级后flutter_unity_widget的NoSuchFieldError错误
错误根源
Unity 2021.3.x版本对Android端的UnityPlayer架构做了调整,原MainActivity中的mUnityPlayer字段不再直接暴露,而你使用的flutter_unity_widget-2022.2.0内部实现依赖了这个旧字段的反射引用,导致升级后抛出NoSuchFieldError。
具体解决方案
1. 优先升级flutter_unity_widget版本
检查pub仓库中flutter_unity_widget的最新版本,确认是否有适配Unity 2021+的更新。如果有,直接升级插件版本,官方通常会修复这类版本兼容性问题。
2. 修改插件内部的UnityPlayer获取逻辑
如果无法升级插件,需要手动修改flutter_unity_widget的UnityPlayerUtils.kt代码,替换依赖mUnityPlayer的逻辑:
- 移除所有通过反射访问
mUnityPlayer的代码 - 改用Unity 2021+支持的方式获取UnityPlayer实例:
// 替换原mUnityPlayer的引用逻辑 val unityPlayer = UnityPlayer.currentActivity?.let { UnityPlayer(it) }
3. 调整Unity端的回调注册逻辑
修改Unity的AndroidManager.cs,确保通过Unity官方API获取正确的Activity上下文,再注册回调:
using System; using UnityEngine; public class AndroidManager : MonoBehaviour { public static AndroidManager _AndroidManager; readonly string PakageName = "com.xraph.plugin.flutter_unity_widget.UnityPlayerUtils"; private void Awake() { try { // 获取Unity官方当前Activity实例 AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaClass unityPlayerUtilsClass = new AndroidJavaClass(PakageName); Debug.Log("[UnityActivityClass]" + unityPlayerUtilsClass); // 传递Activity上下文注册回调 unityPlayerUtilsClass.CallStatic("GetUnityCallback", new AndroidCallbackManager(), currentActivity); Debug.Log("unity-flutter CallbackManager operation"); } catch (Exception e) { Debug.Log("[This is not Working in flutter] :" + e.Message); } } AndroidJavaClass UnityActivityClass; }
同时更新UnityPlayerUtils.kt的GetUnityCallback方法,接收Activity参数以确保上下文正确:
@JvmStatic public fun GetUnityCallback(UnityCallback: UnityCallbackInterface, activity: Activity) { Log.d("GetUnityCallback", "what is : ${UnityManager}") UnityManager = UnityCallback // 可选:基于Activity做必要的初始化操作 }
4. 验证Unity导出配置
- 确保Unity导出Android工程时,MainActivity继承自
io.flutter.embedding.android.FlutterFragmentActivity(或flutter_unity_widget要求的Activity类) - 检查Unity的Player Settings中,Android的"Minimum API Level"和flutter项目的配置一致
内容的提问来源于stack exchange,提问作者yoonwon
相关产品推荐
相关产品推荐

