【问题标题】:androidx.compose.ui.tooling.preview.PreviewActivity is not an activity subclass or aliasandroidx.compose.ui.tooling.preview.PreviewActivity 不是活动子类或别名
【发布时间】:2021-07-23 12:15:08
【问题描述】:

我将 compose 和 kotlinCompilerExtensionVersion 从 beta09 更新为 1.0.0-rc02,Kotlin 版本更新为 1.5.21,Gradle 版本更新为 7.1,Gradle 插件版本更新为 7.1.0-alpha04

从那时起 - 尝试运行 MyScreen - 我收到此错误:

androidx.compose.ui.tooling.preview.PreviewActivity 不是一个活动 子类或别名

我无法解决这个问题。我该如何解决这个问题?

【问题讨论】:

标签: android android-jetpack-compose


【解决方案1】:

我正在使用 Compose 1.0、Kotlin 1.5.10 和 Android Studio 2020.3.1,并且在我的大多数预览版中(不是其他预览版)都遇到了同样的问题。

在顶部栏菜单上,单击“编辑配置”并手动创建一个新配置,其参数与无效配置中的参数相同,并带有警告 (" androidx.compose.ui.tooling.PreviewActivity is not an Activity subclass or alias") 对我有用。

【讨论】:

  • 在 1.0.1/1.5.21 上存在同样的问题,并且此答案中提出的解决方法有效。
【解决方案2】:

我在使用 Bumblebee(AKA,2021.1.1)Canary 6、7 和 8,使用 compose 版本 1.0.0、1.0.1 和 1.1.0-alpha01 时遇到此错误。我刚刚在 Studio 问题跟踪器上提出了一个错误:

https://issuetracker.google.com/issues/196248459

引用我自己的话:

似乎很明显这是“左手不知道右手在做什么”的事情,因为PreviewActivity 不在那个包中,而是androidx.compose.ui.tooling - 从那以后它就没有在android.compose.ui.tooling.preview 中撰写1.0.0-beta09

更新

通过清除所有预览运行配置,我能够让预览再次运行。以下是我的步骤:

  1. 点击“运行配置”选择器并选择编辑配置...
  2. 展开撰写预览分组
  3. 选择所有的预览配置(可以选择第一个,shift-select最后一个)
  4. 点击-按钮删除所有收藏
  5. 点击Ok
  6. 在文件菜单中运行 Invalidate Caches...
  7. 在 AS 重新启动并且缓存重新填充后,运行预览。它现在应该可以工作了。

显然,AS 在我每次启动预览时创建的临时运行配置中缓存了“垃圾”。 “垃圾”对早期版本的 AS 有效,但破坏了更高版本。清除这个缓存让我重新开始工作。

【讨论】:

  • 更新对我有用。谢谢。从 Kotlin 1.5.10 和 Compose 1.0.0 升级到 Kotlin 1.5.21 和 Compose 1.0.1 后出现此错误。
  • 此处相同(1.0.0 -> 1.0.1 & 1.5.10 -> 1.5.21),但删除预览配置、使缓存无效和重新启动并不能解决问题。
  • 但可以确认Anton's answer 做到了。
  • 删除配置中的“撰写预览”对我有用。无需使缓存无效。 (使用 Compose 1.0.1)
  • 我发现从 Invalidate Caches / Restart 菜单运行 Just Restart 就足够了。无需使缓存失效。
【解决方案3】:

我在 Compose 1.0.0 和 Kotlin 1.5.10 上遇到了同样的错误(推荐)。

我通过在我的 gradle 文件中添加以下依赖项 debugImplementation "androidx.compose.ui:ui-tooling:$compose_version" 来修复这些问题。

不要忘记将依赖的版本设置为您当前的撰写版本。

重建并重新加载预览后一切正常。

示例的预览如下所示:

package com.example.compose.basics.ui

import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Card
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import de.db.dbs.travio.compose.basics.themeing.ComposeBasicsTheme

@Preview
@Composable
fun ScreenContent() {
    ComposeBasicsTheme {
        Card(modifier = Modifier
                .padding(8.dp)
                .shadow(8.dp, RoundedCornerShape(32.dp))
        ) {
            Text(
                    text = "Hello World!",
                    modifier = Modifier.padding(16.dp)
            )
        }
    }
}

【讨论】:

    【解决方案4】:

    对我有用的事情是将 ui-tooling 版本降级到 beta09,即使用此依赖项进行 ui-tooling:

    implementation "androidx.compose.ui:ui-tooling:1.0.0-beta09"
    

    【讨论】:

      【解决方案5】:

      如果使用的版本低于此处提及的版本,将 compose_version 更新为 1.0.1 并将 kotlin-gradle-plugin 更新为 1.5.21 可以解决此问题。

      【讨论】:

      • Compose 版本 1.0.1 和 kotlin-gradle-plugin 版本 1.5.21 不适用于我。
      猜你喜欢
      • 2021-07-10
      • 2016-02-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 1970-01-01
      • 2020-08-06
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多