java.lang.NoSuchFieldError: нет поля Companion типа Landroidx/compose/foundation/layout/BoxScope$Companion;
Я впервые использую Jetpack Compose, но получаю эту ошибку. Я не понял, где на самом деле проблема, но я использую архитектуру с одним действием. Если потребуется дополнительная информация, пожалуйста, сообщите мне. Судя по ошибке, проблема, похоже, исходит от эшафота.
val scaffoldState = rememberScaffoldState()
Scaffold(
scaffoldState = scaffoldState,
snackbarHost = {
SnackbarHost(hostState = it)
}
) {
java.lang.NoSuchFieldError: No field Companion of type Landroidx/compose/foundation/layout/BoxScope$Companion; in class Landroidx/compose/foundation/layout/BoxScope; or its superclasses (declaration of 'androidx.compose.foundation.layout.BoxScope' appears in /data/app/com.octagon_technologies.scafe-0B8-dDpbnRqa6fydxFPekw==/base.apk)
at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:149)
at androidx.compose.material.SurfaceKt$Surface$1.invoke(Surface.kt:105)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:102)
at androidx.compose.material.ScaffoldKt$Scaffold$child$1.invoke(Scaffold.kt:168)
at androidx.compose.material.ScaffoldKt$Scaffold$child$1.invoke(Scaffold.kt:167)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:118)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.material.ScaffoldKt.Scaffold-J67Y1T8(Scaffold.kt:197)
at com.octagon_technologies.scafe.presentation.MainActivity$onCreate$1$1.invoke(MainActivity.kt:54)
at com.octagon_technologies.scafe.presentation.MainActivity$onCreate$1$1.invoke(MainActivity.kt:47)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
at androidx.compose.material.TextKt.ProvideTextStyle(Text.kt:246)
at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:78)
at androidx.compose.material.MaterialThemeKt$MaterialTheme$1.invoke(MaterialTheme.kt:77)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:193)
at androidx.compose.material.MaterialThemeKt.MaterialTheme(MaterialTheme.kt:69)
at com.octagon_technologies.scafe.presentation.ui.theme.ThemeKt.ScafeTheme(Theme.kt:46)
at com.octagon_technologies.scafe.presentation.MainActivity$onCreate$1.invoke(MainActivity.kt:47)
at com.octagon_technologies.scafe.presentation.MainActivity$onCreate$1.invoke(MainActivity.kt:46)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.ui.platform.ComposeView.Content(ComposeView.android.kt:346)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:202)
at androidx.compose.ui.platform.AbstractComposeView$ensureCompositionCreated$1.invoke(ComposeView.android.kt:201)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:109)
4 ответа
Этот ответ основан на комментарии CommonsWare, который помог мне исправить ошибку.
Решением было использовать согласованный набор зависимостей Compose. beta04 внесла изменения в BoxScope в артефакте compose-foundation. Возможно, вы получаете beta04 этого артефакта, но получаете более старый артефакт композитного материала.
У меня была такая же ошибка, и я решил ее, обновив версию Compose. Новый шаблон проекта, созданный Android Studio, поставляется с версией Compose
1.0.0-beta01
Откройте файл build.gradle и обновите
compose_version = '1.0.0-beta05'
или новее, если хотите.
Я получил эту ошибку после добавления
androidx.navigation:navigation-compose:1.0.0-alpha10
как зависимость.
Что сработало для меня, так это понизить рейтинг до
androidx.navigation:navigation-compose:1.0.0-alpha09
.
У меня такая же ошибка для этого кода
java.lang.NoSuchFieldError:
No static field Companion of type Landroidx/compose/foundation/layout/BoxScope$Companion;
in class Landroidx/compose/foundation/layout/BoxScope;
or its superclasses (declaration of 'androidx.compose.foundation.layout.BoxScope'
appears in /data/app/ink.iamt.demo-l1DoSMoQUFGcF5KYI5RU0w==/base.apk)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Card {
Text("Hello, Compose")
}
}
}
}
Вы знаете, что мой код не может быть проще. Поэтому я подумал, что это не моя вина. Я проверил свою версию Android Studio, это последняя версия 2020.3.1 Canary 14. И проверил build.gradle для создания Jetpack, это
val compose_version by extra("1.0.0-beta01")
Таким образом, последняя версия Android Studio создает новый проект Compose с версией 1.0.0-beta01, а последняя версия Compose - 1.0.0-beta04. Затем я пытаюсь обновить версию до beta04 и перезапустить свое приложение. Тогда это работает!
Поэтому, пожалуйста, попробуйте обновить свою версию Compose до последней и посмотрите, повезет ли вам.