После обновления версии Android Studio до 2022.2.1 я начал получать эту ошибку при попытке скомпилировать проект:
Не удалось выполнить задачу ': StockRepublicCore: kaptGenerateStubsDebugKotlin'.
Задача compileDebugJavaWithJavac (текущая цель – 1.8) и задача kaptGenerateStubsDebugKotlin (текущая цель – 17) должна быть установлена для совместимости цели jvm с одной и той же версией Java. Рассмотрите возможность использования цепочки инструментов JVM: https://kotl.in/gradle/jvm/toolchain
Мой градиент: скомпилировать SDK 33
defaultConfig {
minSdk 23
targetSdk 33
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.incremental": "true"]
}
}
consumerProguardFiles 'proguard-rules.pro'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
Как исправить эту ошибку?
Android-студия Фламинго | 2022.2.1
Сборка № AI-222.4459.24.2221.9862592 от 31.03.2023
Версия среды выполнения: 17.0.6+0-17.0.6b802.4-9586694 aarch64
ВМ: 64-разрядная виртуальная машина сервера OpenJDK от JetBrains s.r.o.
макОС 13.3.1
Если вы обновили Gradle
до версии 8.0.0
вместе с обновлением Flamingo 2022.2.1, то вам необходимо обновить JDK
до версии 17
Таблицу совместимости можно посмотреть здесь.
Следующий код в build.gradle на уровне приложения должен решить вашу проблему:
android {
...
compileOptions {
sourceCompatibilityJavaVersion.VERSION_17
targetCompatibilityJavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
...
}
Я проверил, и он хорошо работает с API 23.
Кажется, работает! Вы знаете, что делают compileOptions
и kotlinOptions
? Я думал, что установка версии Java на 17 приведет к тому, что код не будет работать на старых версиях Android, на которых работает более старая версия Java. Может, это не то?
CompileOptions
— параметры компиляции Java, а kotlinOptions
— параметры компиляции Kotlin. sourceCompatibility
— это уровень языка исходного кода Java, targetCompatibility
и jvmTarget
— целевая версия сгенерированного байт-кода JVM. Код будет работать в более старых версиях API благодаря дешугарингу. Вероятно, обновление версии Java было сделано для увеличения производительности сборки с помощью Gradle.
Спасибо за ответ. Мой минимальный SDK - 23. Как вы думаете, установка Java 17 в compileOptions и kotlinOptions все еще будет в порядке?