Я создал пустой проект в Android Studio, и он работал нормально, как и ожидалось.Также я добавил несколько простых кодов внутри функции onCreate()
:
val text = "Test String"
val newText = text.replace("String", "Replaced")
println("$newText")
, что также было хорошо, и код работал.
Затем, единственное, что я сделал, я добавил Scarlet WebSocket library в мой проект, как предложено в файле README (т.е. просто добавили ссылку на репозиторий и соответствующую запись implementation
в мой файл Gradle).
После этого я попытался собрать иначать проект.Сборка прошла успешно, и приложение запустилось на моем телефоне Android, но сразу же дало сбой, когда оно достигло вышеупомянутого кода (т.е. простое создание и изменение строки Kotlin), за исключением следующего:
java.lang.NoClassDefFoundError: Failed resolution of: Lkotlin/text/StringsKt;
И я не могу понять, почему я получаю эту ошибку и как ее исправить.Я имею в виду, что проект построен без каких-либо ошибок, и я ожидаю, что такие базовые вещи будут работать, более того, они работали до того, как я добавил новую зависимость, и я не могу понять, как добавление новой зависимости сломало совершенно другое место, в котором просто использовались строки Kotlin.Я могу удалить одну строку implementation 'com.github.tinder:scarlet:0.1.7'
из моего скрипта gradle, и все снова начнет работать.Как дополнительная зависимость может сломать все?
Я вижу большой недостаток в использовании Android / Kotlin, что такие вещи могут происходить во время выполнения, когда тот не ожидает их, и я попытался найти ответ в Google, и этоКажется, что эта проблема довольно распространена среди тех, кто использует Kotlin на Android, но я не смог найти объяснение, почему это происходит и как предотвратить такие ошибки.
Более подробное описание (вместе с скриптами gradleкод) можно найти внутри проблемы, которую я открыл в библиотеке Github Issues of Scarlet .
NOTE. Я заметил следующие предупреждения:
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, которую они используют, я попытался применить эту версию в своем проекте (изменив $kotlin_version
в моих опциях gradle), но это не решило проблему.Не уверен, может ли это предупреждение каким-либо образом быть связано с проблемой.