Lsp4j JSON RPC 库在 Android 21 上抛出 NoClassDefFoundError 异常

问题描述

我正在使用 eclipse lsp4j library 连接到远程语言服务器。我的应用程序需要支持 API Level 21 系统,并且在较新的 android 版本上不会抛出此异常。 (我在 API 级别 30 上进行了测试)。我对如何修复它有点不知所措。

这是我必须连接到语言服务器的代码:

val launcher = LSPLauncher.createClientLauncher(this,inputStream,outputStream)

这些是我从调试器得到的日志:

I/art: Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.MessageTracer>
    Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.MessageTracer>
    Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.MessageTracer>
    Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.MessageTracer>
I/art: Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.services.-$$Lambda$ServiceEndpoints$eKMG28mxVS2rcQINSfNNvWiJqVc>
    Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.services.-$$Lambda$ServiceEndpoints$eKMG28mxVS2rcQINSfNNvWiJqVc>
I/art: Rejecting re-init on previously-failed class java.lang.Class<org.eclipse.lsp4j.jsonrpc.services.-$$Lambda$ServiceEndpoints$eKMG28mxVS2rcQINSfNNvWiJqVc>
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.lsp_client,PID: 6699
    java.lang.NoClassDefFoundError: org.eclipse.lsp4j.jsonrpc.services.-$$Lambda$ServiceEndpoints$eKMG28mxVS2rcQINSfNNvWiJqVc
        at org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints.getSupportedMethods(ServiceEndpoints.java:90)
        at org.eclipse.lsp4j.jsonrpc.services.ServiceEndpoints.getSupportedMethods(ServiceEndpoints.java:82)
        at org.eclipse.lsp4j.jsonrpc.Launcher$Builder.getSupportedMethods(Launcher.java:404)
        at org.eclipse.lsp4j.jsonrpc.Launcher$Builder.createJsonHandler(Launcher.java:335)
        at org.eclipse.lsp4j.jsonrpc.Launcher$Builder.create(Launcher.java:319)
        at org.eclipse.lsp4j.launch.LSPLauncher.createClientLauncher(LSPLauncher.java:106)
        at com.example.lsp_client.server.LanguageServerSocket.startSession(LanguageServerSocket.kt:68)
...

我猜 lsp4j 库存在某种兼容性问题,但我不确定从哪里开始调试。我的 Gradle 配置与相关依赖项的上下文:

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'org.jetbrains.kotlin.plugin.serialization'
}

android {
    compileSdkVersion 30

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
        useIR = true
    }
    buildFeatures {
        compose true
    }
    composeOptions {
        kotlinCompilerExtensionVersion compose_version
        kotlinCompilerVersion kotlin_version
    }
}

dependencies {
...
    implementation 'org.eclipse.lsp4j:org.eclipse.lsp4j:0.10.0'
    implementation 'org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.10.0'
...
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)