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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:44:59