При попытке создания jetpack отображается ошибка: серверная часть компилятора и не может быть загружена старым компилятором

#android #kotlin #android-jetpack #android-jetpack-compose

#Android #kotlin #android-jetpack #android-jetpack-compose

Вопрос:

Класс ‘androidx.compose.ui.platform.ComposeView’ скомпилирован новой серверной частью компилятора Kotlin и не может быть загружен старым компилятором

Это мой метод onCreate :

 override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    return inflater.inflate(R.layout.fragment_delivered, container, false).apply {
        findViewById<ComposeView>(R.id.compose_view).setContent {
            MaterialTheme {
                Surface {
                    Text("Hello")
                }
            }
        }
    }
}
  

Скомпоновать версию:

 accompanistVersion = "0.1.9"
composeVersion = '0.1.0-dev17'
  

app.gradle

 buildFeatures {
        compose true
        dataBinding true
    }
    composeOptions {
        kotlinCompilerVersion rootProject.kotlinVersion
        kotlinCompilerExtensionVersion rootProject.composeVersion
    }



// Compose
    implementation "androidx.compose.runtime:runtime:$rootProject.composeVersion"
    implementation "androidx.compose.ui:ui:$rootProject.composeVersion"
    implementation "androidx.compose.foundation:foundation:$rootProject.composeVersion"
    implementation "androidx.compose.foundation:foundation-layout:$rootProject.composeVersion"
    implementation "androidx.compose.material:material:$rootProject.composeVersion"
    implementation "androidx.compose.ui:ui-viewbinding:$rootProject.composeVersion"
    implementation "androidx.ui:ui-tooling:$rootProject.composeVersion"
    implementation "androidx.compose.runtime:runtime-livedata:$rootProject.composeVersion"
    implementation "com.google.android.material:compose-theme-adapter:$rootProject.composeVersion"
    implementation "dev.chrisbanes.accompanist:accompanist-coil:$rootProject.accompanistVersion"
  

Ответ №1:

По умолчанию app/build.grade при создании нового проекта с «Пустой операцией компоновки» включаются следующие параметры.

 android {
    // other options

    kotlinOptions {
        jvmTarget = '1.8'
        useIR = true
    }

    // more options
}
  

Добавление этих параметров (в частности useIR = true ), казалось, исправило ошибку для меня.


useIR Опция ссылается на новую серверную часть JVM для Kotlin, для которой в документации конкретно указано следующее.

Если вы включите Jetpack Compose, вы автоматически перейдете на новую серверную часть JVM без необходимости указывать параметр компилятора в kotlinOptions .

Что, по-видимому, неверно.

Комментарии:

1. > «При использовании компилятора командной строки добавьте параметр компилятора -Xuse-ir.» . kotlinlang.org/docs/reference/whatsnew14.html

2. Добавление useIR = true решило это для меня. Есть идеи о том, что именно делает useIR?

3. @capt.swag он включает новую JVM unified IR backend , которая требуется для создания Jetpack.

Ответ №2:

Пожалуйста, добавьте эту задачу в свой файл app / build.gradle:

 tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs  = ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}
  

Комментарии:

1. Что касается того, зачем нужны эти аргументы компилятора: пока Jetpack Compose все еще находится в альфа-версии, они подавляют ошибки при использовании зависимостей, которые были скомпилированы новым IR-сервером, и при использовании классов, которые еще не выпущены. ( github.com/android/compose-samples/issues /… )

Ответ №3:

Выполнение шагов в официальном руководстве по установке приводит меня к той же проблеме.

Добавление необходимых зависимостей / конфигурации для библиотеки компоновки устранило эту проблему для меня.

Комментарии:

1. Задачи. Раздел withType — это то, что исправило это для меня.

Ответ №4:

.версия kts

 tasks.withType<KotlinCompile>() {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = listOf(
        *kotlinOptions.freeCompilerArgs.toTypedArray(),
        "-Xallow-jvm-ir-dependencies",
        "-Xskip-prerelease-check")
    useIR = true
}
  

Комментарии:

1. Незначительный комментарий: Мне пришлось добавить kotlinOptions. перед использованием.

Ответ №5:

Это зависимость, которая вызывает соответствующую ошибку в моем случае:

 androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.0.5'
  

Я предполагаю, что игра с ним должна помочь

Ответ №6:

найдите версию, совместимую с kotlin, здесь

Обновить зависимость в build.gradle

 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${version}"
  

вот ${version} версия kotlin.

Настройте подходящую версию JDK в настройках Gradle. введите описание изображения здесь

Выполните следующие команды

 gradle clean

gradle build
  

Для меня это решило мою проблему.

Пожалуйста, дайте мне знать, если у вас это не сработает.