Является ли OkHttp 4.0.0 преднамеренно несовместимым с jvm target 1.6?При обновлении с OkHttp 3.12.0 до 4.0.0 я сталкиваюсь со следующей ошибкой сборки:
Невозможно встроить байт-код, созданный с целью 1.8 JVM, в байт-код, который создается с целью 1.6 JVM.Пожалуйста, укажите правильную опцию -jvm-target
. При дальнейшей проверке я обнаружил, что основной причиной является интерфейс Interceptor, имеющий статический метод (функция внутри объекта-компаньона).В руководстве по обновлению не упоминается об этой обратной несовместимости, которая заставляет меня думать, что она непреднамеренная.
Interceptor
Нашел сообщение в блоге с некоторыми пояснениями. Начиная с OkHttp 3.13.1 требуется JVM target 1.8. Предлагаемое изменение:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } ... }
Я обнаружил, что это все еще не удается. Добавление еще одной инструкции окончательно исправляет сборку.
kotlinOptions { jvmTarget = '1.8' }
Я нашел самое простое решение для этого:
Groovy:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions.jvmTarget = '1.8' }
Kotlin (kts):
android { compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
Да, OkHttp 4 работает на Android 5.0+ (уровень API 21+) и на Java 8+.
Попробуйте, это может вам помочь.
Open the Android Studio Setting Go to Build, Execution, Deployment > Compiler > Kotlin Compiler Change the Target JVM version to 1.8 Click Apply