Ошибка "module was compiled with an incompatible version of kotlin" при подключении "material" зависимости
Хочу использовать xml верстку и Compose в одном проекте, посмотреть как они вместе сочетаются. Но есть проблема, когда я добавляю в зависимости
implementation 'com.google.android.material:material:1.7.0'
вылетает ошибка
android material gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.7.10/bac80c520d0a9e3f3673bc2658c6ed02ef45a76a/kotlin-stdlib-common-1.7.10.jar!/meta-inf/kotlin-stdlib-common.kotlin_module: module was compiled with an incompatible version of kotlin. the binary version of its metadata is 1.7.1, expected version is 1.5.1.
Не могу найти место, где нужно поправить, чтобы проект собрался.
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-kapt'
id("kotlin-parcelize")
}
android {
compileSdk 32
defaultConfig {
applicationId
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
buildFeatures {
compose true
}
viewBinding {
enabled = true
}
composeOptions {
kotlinCompilerExtensionVersion compose_version
}
packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
}
dependencies {
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
def nav_version = "2.5.3"
implementation("androidx.navigation:navigation-compose:$nav_version")
implementation "androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1"
implementation "androidx.compose.material:material-icons-extended:$compose_version"
implementation 'androidx.core:core-ktx:1.7.0'
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.activity:activity-compose:1.3.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version"
}
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "Jetpack Compose Test"
include ':app'
// build.gradle (project)
buildscript {
ext {
compose_version = '1.1.0-beta01'
}
}
// Top-level build file where you can add configuration options common
to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.5.31' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Как я понял, зависимость
implementation 'com.google.android.material:material:1.7.0'
требует в build.gradle (project) установить
plugins { id 'org.jetbrains.kotlin.android' version '1.7.21' apply false }
но тогда появляется другая ошибка с совместимостью compose. В итоге я оставил в проекте более старую версию material ->
'com.google.android.material:material:1.4.0'
теперь проект собирается, но когда дохожу до фрагмента compose с material компонентами ловлю краш
Ответы (3 шт):
В тексте ошибки сказано, что material-зависимость при компиляции использует версию языка Kotlin 1.7.1.
Чтобы исправить ошибку, увеличьте версию Kotlin в вашем проекте с 1.5.31 до 1.7.20:
plugins {
...
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
}
Пока остановился на том, что не использую material компоненты. Вместо material button поставил просто button, теперь все собирается и не ловлю краши. Чтобы использовать xml внутри compose фрагмента нужно добавить зависимость
implementation "androidx.compose.ui:ui-viewbinding:1.2.1"
Во фрагменте
@Composable
fun MyFragment(navController: NavController) {
AndroidViewBinding(MyFragmentBinding::inflate) {
// ваши функции с действиями над элементами из xml разметки
}
}
Решение найдено. Оказывается каждая версия compose совместима только с конкретной версией Kotlin. Вот здесь есть таблица совместимостей версий
Таким образом, если у вас версия Kotlin 1.7.20, нужно установить
compose_version = '1.4.0-alpha01'
Кроме того, у вас также могут возникнуть ошибки при использовании стилей, тем и компонентов из material. Я также заменил в themes.xml
<style name="Theme.Name" parent="android:Theme.Material.Light.NoActionBar">
на
<style name="Theme.Name" parent="android:Theme.MaterialComponents.DayNight.NoActionBar">
и в манифесте нужно также поменять тему для application и для activity на
android:theme="@style/Theme.Name"