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

Posted

技术标签:

【中文标题】将 Jetpack Compose 升级到 1.0.0-beta07 后出现 java.lang.NoSuchMethodError【英文标题】:java.lang.NoSuchMethodError after upgrading Jetpack Compose to 1.0.0‑beta07 【发布时间】:2021-08-09 04:24:03 【问题描述】:

将 Jetpack Compose 升级到 1.0.0-beta07 后,我在 LiveData 对象上运行 observeAsState 时遇到以下错误。

java.lang.NoSuchMethodError: No interface method startReplaceableGroup(ILjava/lang/String;)V in class Landroidx/compose/runtime/Composer; or its super classes

The documentation 表示升级时会出现错误,为了解决该错误,必须重新编译依赖于 Compose 的库。

我不知道必须这样做。我尝试再次制作该项目,但也无济于事。

这是我项目中的依赖项:

dependencies 
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.compose.material:material:$compose_version"
    implementation "androidx.compose.ui:ui-tooling:$compose_version"
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.0-alpha01'
    implementation 'androidx.activity:activity-compose:1.3.0-alpha07'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
    implementation "io.github.vanpra.compose-material-dialogs:datetime:0.4.0"
    implementation "io.github.vanpra.compose-material-dialogs:datetime:0.4.0"
    implementation "androidx.appcompat:appcompat:$appCompatVersion"
    implementation "androidx.activity:activity-ktx:$activityVersion"
    implementation "androidx.room:room-ktx:$roomVersion"
    kapt "androidx.room:room-compiler:$roomVersion"
    androidTestImplementation "androidx.room:room-testing:$roomVersion"
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.30"
    api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines"
    api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines"
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'androidx.compose.runtime:runtime-livedata:1.0.0-beta06'
    implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha07"

这些是版本:

ext 
        compose_version = '1.0.0-beta07'
        activityVersion = '1.1.0'
        appCompatVersion = '1.2.0'
        constraintLayoutVersion = '2.0.2'
        coreTestingVersion = '2.1.0'
        coroutines = '1.3.9'
        lifecycleVersion = '2.3.1'
        materialVersion = '1.2.1'
        roomVersion = '2.3.0'
    

【问题讨论】:

嗨,有趣,也许是这里提到的问题developer.android.com/jetpack/androidx/releases/… @jspcal 嗨。是的,这就是问题所在。我提供的链接中提到了相同的注释,但是您的链接也没有包含有关如何重新编译所述依赖项的提示。 你能从build.gradle添加你的依赖吗? @RyanM 我添加了依赖项。 尝试将 'androidx.compose.runtime:runtime-livedata:1.0.0-beta06' 更新为 beta07 【参考方案1】:

任何使用Navigation with compose 的人也应该将导航库更新到最新的可用版本。

就我而言,我正在使用

    implementation "androidx.navigation:navigation-compose:1.0.0-alpha10"

并且不得不替换为

    implementation "androidx.navigation:navigation-compose:2.4.0-alpha01"

【讨论】:

那是我的情况;)感谢您的回答。 它通过指向我的rememberNavController() 电话给了我一个提示,它与导航相关。谢谢!【参考方案2】:

您的 runtime-livedata 依赖已过时:

implementation 'androidx.compose.runtime:runtime-livedata:1.0.0-beta06'

您应该更新它以使用与其余 Compose 依赖项相同的版本:

implementation "androidx.compose.runtime:runtime-livedata:$compose_version"

这将是有效的:

implementation 'androidx.compose.runtime:runtime-livedata:1.0.0-beta07'

【讨论】:

【参考方案3】:

对我有用的是更新到

implementation("androidx.hilt:hilt-navigation-compose:1.0.0-alpha02")

implementation("com.google.accompanist:accompanist-swiperefresh:0.10.0")

【讨论】:

【参考方案4】:

对我来说,它将约束布局撰写版本更新为1.0.0-alpha07 androidx.constraintlayout:constraintlayout-compose:$constraint_layout_version

【讨论】:

【参考方案5】:

从 1.0.0-alpha07 更新到 1.0.0-alpha11 需要分页组合

implementation "androidx.paging:paging-compose:1.0.0-alpha11"

【讨论】:

【参考方案6】:

我已经通过添加这个依赖解决了它-

implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07'

【讨论】:

以上是关于将 Jetpack Compose 升级到 1.0.0-beta07 后出现 java.lang.NoSuchMethodError的主要内容,如果未能解决你的问题,请参考以下文章

Jetpack Compose 1.0 正式发布,快学起来

Jetpack Compose 1.0 正式发布,快学起来

Jetpack Compose 1.0 正式发布!打造原生 UI 的 Android 现代工具包

将 jetpack compose 添加到现有项目

Jetpack Compose 从入门到入门

Jetpack Compose 从入门到入门