Jetpack compose 更新到 1.0.0-rc01 后无法预览

Posted

技术标签:

【中文标题】Jetpack compose 更新到 1.0.0-rc01 后无法预览【英文标题】:Jetpack compose can't preview after updating to 1.0.0-rc01 【发布时间】:2021-09-14 08:37:29 【问题描述】:

这仅在我更新到 1.0.0-rc01 时发生在我身上。 它说:

找不到以下类: - androidx.compose.ui.tooling.preview.ComposeViewAdapter(修复构建路径、编辑 XML、创建类)

我的代码:

@Composable
@Preview
fun CenterProgress()
    Box(
        modifier= Modifier.fillMaxSize(),
        contentAlignment = Alignment.Center
    )
        CircularProgressIndicator(strokeWidth = 3.dp)
    

【问题讨论】:

根据 Kotlinlang Slack 的 #compose 频道上的评论,在升级到北极狐 RC1 之前,预览将无法使用,遗憾的是目前尚不可用。 ???同样的评论建议您可以将工具依赖项放回beta09,它们将与rc01 一起使用主要依赖项。请注意,我还没有尝试过,所以我不知道它是否有效。 不幸的是退回到 beta09 对我仍然不起作用 回退到 beta09 对我也不起作用。用北极狐 5、北极狐 2 和大黄蜂尝试过 @CommonsWare 提到的解决方案在 Bumblebee Canary 3 上对我有用。 如果你想使用稳定的compose版本试试这个jetpackcompose.net/post/jetpack-compose-preview-not-showing 【参考方案1】:

2021 年 7 月 20 日更新: 只需下载并使用latest AS 即可解决问题


他们在 rc01 中拆分了一些包,但根据 @CommonsWare 评论(所有功劳归于他)看来,Android Studio 版本本身存在问题。 你有两个选择:

    降级到 beta09,直到 AS ArcticFox RC1 结束 尝试建议的解决方法,使用 AS Arctic Fox Beta 5,将所有撰写依赖项保留为 1.0.0-rc01 版本,仅将 ui-tooling 降级为 1.0.0-beta09(由 cmets 确认)。

更多细节

在这里你可以找到他们在1.0.0-rc01https://android-review.googlesource.com/c/platform/frameworks/support/+/1739498 中移动的所有课程以及为什么会这样决定的解释。

简而言之,您现在可以针对一些特定的优化场景(不应该是默认情况)执行此操作:

debugImplementation "androidx.compose.ui:ui-tooling:1.0.0-rc01"
implementation "androidx.compose.ui:ui-tooling-preview:1.0.0-rc01"

【讨论】:

我试过了,我得到了这个无法访问'ComposeViewAdapter':它在'androidx.compose.ui.tooling'中是内部的 这很奇怪......你在 build.gradle 中更新了kotlinCompilerExtensionVersion 吗?可能是 AS 本身的问题 Android Studio Artic Fox (2020.3.1) Beta 5 - 2021 年 7 月 2 日。对我来说,它解决了问题,将所有 compose 依赖项保留为 1.0.0-rc01 版本并仅降级 ui-tooling到 1.0.0-beta09。 今天下载了最新的可用 AS,创建了一个新项目并将内容更新到 rc01,为了能够预览,我必须使用 debugImplementationui-tooling:1.0.0-beta07"; 而不是 rc01。跨度> 因为 RC1 出来了,我的问题似乎已经解决了【参考方案2】:

更新Android Studio Bumblebee 不再需要此功能 | 2021.1.1 Canary 6Android Gradle 插件 7.1.0-alpha06。注意:Canary 4 已经修复了这个问题,但需要一个损坏的 AGP 版本。现在也解决了。

除了上面的答案:这里是如何在gradle中强制使用ui-tooling版本:

implementation("androidx.compose.ui:ui-tooling:$compose_version") 
    version 
        // TODO: Remove this when Android Studio has become compatible again
        // Android Studio Bumblebee | 2021.1.1 Canary 3 is not compatible with module ui-tooling 1.0.0-rc01 or higher.
        // The Run Configuration for Composable Previews that Android Studio makes expects a PreviewActivity class
        // in the `androidx.compose.ui.tooling.preview` package, but it was moved in 1.0.0-rc01, and thus causes error:
        // "androidx.compose.ui.tooling.preview.PreviewActivity is not an Activity subclass or alias".
        // For more, see: https://***.com/questions/68224361/jetpack-compose-cant-preview-after-updating-to-1-0-0-rc01
        strictly("1.0.0-beta09")
    


【讨论】:

这个解决方案很好用,非常感谢【参考方案3】:

就我而言,这是因为我在“发布”时留下了构建变体。 将其改回“调试”可修复缺少的类错误。

预览功能可能来自 build.gradle 中的以下行

debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"

【讨论】:

好地方 - 对我来说也是正确的问题。【参考方案4】:

我像上面的评论一样尝试过,它实际上对我有帮助,只是我必须删除 :

Artic Fox Beta 5 的链接:https://developer.android.com/studio/preview

androidx.compose.ui:ui-tooling-preview. 我的撰写配置如下所示:

android 

def compose_version = '1.0.0-rc01'


composeOptions 
  kotlinCompilerExtensionVersion "$compose_version"


dependencies 
  def compose_version = '1.0.0-rc01'
/**Compose Related*/

    implementation "androidx.compose.compiler:compiler:$compose_version"
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.activity:activity-compose:1.3.0-rc01"
    implementation "androidx.compose.material:material:$compose_version"

    implementation "androidx.compose.ui:ui-tooling:1.0.0-beta09"
//    Need to comment this two lines to work on artic fox
//    implementation "androidx.compose.ui:ui-tooling:$compose_version"
//    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
    /**Accompanist*/
    // Coil
    implementation 'dev.chrisbanes.accompanist:accompanist-insets:0.6.2'
    implementation "com.google.accompanist:accompanist-coil:0.13.0"
    implementation "androidx.compose.runtime:runtime:$compose_version"
    implementation "androidx.compose.runtime:runtime-livedata:$compose_version"

    /** Material Icons */
    implementation "androidx.compose.material:material-icons-extended:$compose_version"


    // Jetpack Compose Integration
    implementation "androidx.navigation:navigation-compose:2.4.0-alpha04"



【讨论】:

【参考方案5】:

降级 ui-tooling 库时仍然会出现错误:

确保您没有依赖于 ui-tooling:1.0.0-rc01 的库 您可以通过在您的 android studio 终端中使用 ./gradlew app:dependencies 来发现这一点

就我而言,我使用的是 com.google.accompanist:accompanist-swiperefresh:13.0.0,它依赖于 ui-tooling:1.0.0-rc01。当我降级到 accompanist-swiperefresh:12.0.0

时,预览工作正常

【讨论】:

提到的伴奏版本不正确,应该是0.13.00.12.0。除此之外,很棒的发现!解决了我的问题。

以上是关于Jetpack compose 更新到 1.0.0-rc01 后无法预览的主要内容,如果未能解决你的问题,请参考以下文章

将 Jetpack Compose 升级到 1.0.0-beta07 后出现 java.lang.NoSuchMethodError

如何用 Jetpack Compose 开发一个页面?

Jetpack Compose State:修改类属性

Jetpack Compose: java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from DecorView(代码

Jetpack compose 中带有提示文本的 TextField

Jetpack Compose 数字输入