Переход на Kotlin 1.3.30 ломает hashCode только на Android API 21 - PullRequest
7 голосов
/ 16 апреля 2019

Я переключил свой проект Android с 1.3.20 на 1.3.30, и я неожиданно получаю следующие исключения из некоторых классов, когда они вызывают метод hashCode ().Обратите внимание, я получаю это исключение только для API платформы Android 21 и 22, кроме Android API 24, все работает нормально.

Причина: java.lang.NoSuchMethodError: Нет статического метода hashCode (J)Я в классе Лява / Ланг / Лонг;или его суперклассы (объявление 'java.lang.Long' появляется в /system/framework/core-libart.jar)

Это поток , в котором упоминаются похожие симптомыно это было для Kotlin 1.2, мне интересно, сталкивался ли кто-нибудь с подобной ситуацией и есть ли обходной путь для этого?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2019

В качестве альтернативы вы можете установить цель JVM для компиляции Kotlin на "1.6", так как Kotlin 1.3.30 начал выводить цель JVM из версии Java в android.compileOptions и выбирает "1.8", если оба sourceCompatibility и targetCompatibility установлены на это или выше.

В модуле build.gradle добавьте:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = '1.6'
    }
}

Нет необходимости делать это один раз проблемав D8 исправлен десагеринг .

Эта проблема отслеживается в трекере проблем Kotlin как KT-31027 .

1 голос
/ 16 апреля 2019

Это связано с этой проблемой - https://issuetracker.google.com/issues/129730297, поэтому решение, по-видимому, заключается в обновлении до последней версии AGP!

...