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 до последней и посмотрите, повезет ли вам.

Другие вопросы по тегам