我在Android Studio中创建了一个空项目,它按预期工作正常。我还在onCreate()
函数中添加了一些简单的代码:
val text = "Test String"
val newText = text.replace("String", "Replaced")
println("$newText")
这也很好,代码可以正常工作。
然后,我唯一做的就是按照自述文件中的建议将Scarlet WebSocket library添加到项目中(即,仅将链接添加到存储库,并将相应的implementation
条目添加到我的gradle文件中)。
之后,我尝试构建并启动该项目。构建成功,并且应用程序在我的Android手机上启动,但是在到达上述代码(即简单创建和更改Kotlin字符串)时立即崩溃,除了以下例外:
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/text/StringsKt;
而且我不明白为什么会出现此错误以及如何解决该错误。我的意思是,该项目的构建没有任何错误,我希望这样的基本功能可以正常工作,而且在我添加新的依赖项之前这些功能可以工作,而且我不明白添加新的依赖项是如何在完全使用Kotlin字符串的地方完全打破的。我可以从gradle脚本中删除单个implementation 'com.github.tinder:scarlet:0.1.7'
行,然后一切重新开始。额外的依赖关系如何破坏一切?
我认为这是Android / Kotlin使用中的一个大缺陷,即此类事情可能会在运行时发生,而人们并不期望这些事情发生,因此我尝试用Google搜索答案,看来这个问题在那些在Android上使用Kotlin,但我找不到解释为什么会发生这种情况以及如何防止此类错误。
在Github Issues of Scarlet library中打开的问题中,可以找到更详细的描述(以及gradle脚本代码)。
注意。。我注意到以下警告:
w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
/home/developer/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.2.10/85fe1811f3e586d0cc53aba1394d8089f1862215/kotlin-stdlib-jdk8-1.2.10.jar (version 1.2)
/home/developer/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.11/4839661cf6ce3c14b65ed7dcf5b9249b44ecca16/kotlin-stdlib-jdk7-1.3.11.jar (version 1.3)
/home/developer/.gradle/caches/transforms-1/files-1.1/kotlin-reflect-1.3.0.jar/1b0308d4761482ab05da95492cd24014/jetified-kotlin-reflect-1.3.0.jar (version 1.3)
/home/developer/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.11/4cbc5922a54376018307a731162ccaf3ef851a39/kotlin-stdlib-1.3.11.jar (version 1.3)
/home/developer/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.11/d8b8e746e279f1c4f5e08bc14a96b82e6bb1de02/kotlin-stdlib-common-1.3.11.jar (version 1.3)
w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath
不确定1.2版本的模块来自何处。我还检查了Scarlet存储库和它们使用的kotlin版本,我尝试在项目中强制使用该版本(在gradle选项中更改了$kotlin_version
),但是并没有解决问题。不确定此警告是否可能与问题有关。