Unity集成LiveKit Android插件报错:NoSuchFieldError(INSTANCE字段不存在)
我为Unity开发了一款对接LiveKit SDK的插件,将Android项目构建生成的aar文件放入Unity项目后,在手机上运行应用时,Android Logcat中出现如下错误:
2024.03.13 16:44:14.799 20358 20436 Error Unity AndroidJavaException: java.lang.NoSuchFieldError: No field INSTANCE of type Lio/livekit/android/LiveKit; in class Lio/livekit/android/LiveKit; or its superclasses (declaration of 'io.livekit.android.LiveKit' appears in /data/app/~~BC1yiJxYnjbz3X2zedFAZQ==/com.DefaultCompany.Myproject1-SgP7HCJfzbWMD53FwL8ZMQ==/base.apk)
2024.03.13 16:44:14.799 20358 20436 Error Unity java.lang.NoSuchFieldError: No field INSTANCE of type Lio/livekit/android/LiveKit; in class Lio/livekit/android/LiveKit; or its superclasses (declaration of 'io.livekit.android.LiveKit' appears in /data/app/~~BC1yiJxYnjbz3X2zedFAZQ==/com.DefaultCompany.Myproject1-SgP7HCJfzbWMD53FwL8ZMQ==/base.apk)
2024.03.13 16:44:14.799 20358 20436 Error Unity at com.northside_shawty.unitylivekit.LiveKitManager.ConnectToRoom(LiveKitManager.kt:15)
2024.03.13 16:44:14.799 20358 20436 Error Unity at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
2024.03.13 16:44:14.799 20358 20436 Error Unity at com.unity3d.player.UnityPlayer.access$500(Unknown Source:0)
2024.03.13 16:44:14.799 20358 20436 Error Unity at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source:126)
2024.03.13 16:44:14.799 20358 20436 Error Unity at android.os.Handler.dispatchMessage(Handler.java:102)
2024.03.13 16:44:14.799 20358 20436 Error Unity at android.os.Looper.loopOnce(Looper.java:226)
2024.03.13 16:44:14.799 20358 20436 Error Unity at andro
我在LiveKit官方文档中未找到LiveKit类中的INSTANCE字段,我的Android插件核心代码如下:
class LiveKitManager { fun ConnectToRoom(context: Context, url: String, token: String) { val room = LiveKit.create(context) CoroutineScope(Dispatchers.Main).launch { room.connect(url, token) val localParticipant = room.localParticipant val videoTrack = localParticipant.createVideoTrack( "video", LocalVideoTrackOptions(position = CameraPosition.BACK) ) localParticipant.publishVideoTrack(videoTrack) val audioTrack = localParticipant.createAudioTrack( "audio", LocalAudioTrackOptions() ) localParticipant.publishAudioTrack(audioTrack) localParticipant.setCameraEnabled(true) localParticipant.setMicrophoneEnabled(true) } } }
Unity端调用插件的代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Stream : MonoBehaviour { public string url; public string token; void Start() { AndroidJavaObject liveKitManager = new AndroidJavaObject("com.northside_shawty.unitylivekit.LiveKitManager"); AndroidJavaObject context = new AndroidJavaClass("com.unity3d.player.UnityPlayer") .GetStatic<AndroidJavaObject>("currentActivity") .Call<AndroidJavaObject>("getApplicationContext"); liveKitManager.Call("ConnectToRoom", context, url, token); } }
请问该如何解决这个报错问题?
这个错误的核心原因是你构建的AAR中没有正确包含LiveKit SDK的依赖,或者依赖版本不匹配——INSTANCE是LiveKit内部实现的单例字段,虽然你代码里没直接调用,但SDK运行时会用到,缺失就会触发报错。按以下步骤排查修复:
确保Android插件项目正确引入LiveKit SDK
检查Module级别的build.gradle,确认LiveKit依赖使用implementation而非compileOnly,否则构建AAR时不会把SDK代码打包进去:dependencies { implementation 'io.livekit:livekit-android:1.8.0' // 建议使用具体版本号,避免自动升级带来的兼容问题 }同步Gradle后清理项目缓存(
Build > Clean Project),再重新构建AAR。排查Unity中的依赖冲突
查看Unity项目Assets/Plugins/Android目录,删除重复的LiveKit相关AAR/JAR文件;若有其他第三方插件依赖OkHttp、WebRTC等库,需统一这些依赖的版本,避免类加载冲突。修正协程生命周期管理
你代码里用CoroutineScope(Dispatchers.Main).launch创建的协程没有绑定生命周期,容易引发内存泄漏。建议将LiveKitManager改为绑定Activity生命周期的类,使用viewModelScope或者手动在合适时机取消协程。重新验证AAR内容
用jar tf your-plugin.aar命令查看AAR内部文件,确认io/livekit/android/LiveKit.class存在;也可以用javap -c io.livekit.android.LiveKit查看字节码,验证INSTANCE字段是否存在。
替换Unity中旧的AAR文件,执行Assets > Refresh后重新构建Android包测试。
内容的提问来源于stack exchange,提问作者Norman Atomic

