#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
Для меня это решило мою проблему.
Пожалуйста, дайте мне знать, если у вас это не сработает.