java.lang.IncompatibleClassChangeError после обновления до kotlin RC1 (1.0.0-rc-1036)

После обновления до kotlin RC1 (1.0.0-rc-1036), я получаю эту ошибку:

java.lang.IncompatibleClassChangeError: метод java.lang.Object kotlin.Lazy.getValue () 'должен был иметь интерфейс типа, но вместо этого был найден тип типа virtual (объявление «java.lang.reflect.ArtMethod» появляется в /system/framework/core-libart.jar)

Я использую ленивый в одном классе:

val api by lazy { val client = OkHttpClient() ... } 

Из примечаний к выпуску :

Lazy теперь является интерфейсом, открытым для реализации

Но я не могу понять, что мне нужно изменить, чтобы снова запустить мой код …

Когда код компилируется против стандартной библиотеки kotlin-stdlib-1.0.0-rc-1036.jar компилятор видит, что Lazy является интерфейсом и генерирует инструкцию INVOKEINTERFACE для получения значения его свойства:

 INVOKEINTERFACE kotlin/Lazy.getValue ()Ljava/lang/Object; 

В случае, если во время выполнения вы загрузите Lazy из стандартной библиотеки pre-RC, это будет класс, а не интерфейс. Здесь JVM ловит эту несогласованность и бросает IncompatibleClassChangeError .

Поэтому вам нужно убедиться, что у вас нет старой стандартной библиотеки, доступной для загрузчика классов во время выполнения.

Если вы используете Gradle, следуйте инструкциям на странице https://kotlinlang.org/docs/reference/using-gradle.html#configuring-dependencies, чтобы настроить / обновить зависимость от стандартной библиотеки.