Wear OS默认项目运行报错:TimeText()触发NoSuchMethodError
我在构建并运行包含Tile与Complication的Wear OS默认项目时,模拟器中出现如下运行时错误:
Process: au.gondwanasoftware.ontrack, PID: 9869
java.lang.NoSuchMethodError: No static method mutableStateOf(J)Landroidx/compose/runtime/MutableLongState; in class Landroidx/compose/runtime/SnapshotLongStateKt; or its super classes (declaration of 'androidx.compose.runtime.SnapshotLongStateKt' appears in /data/app/~~q11wAqlBg8mZ6aPx5tjsyw==/au.gondwanasoftware.ontrack-s9r1ombsSKACiWkkVk3gnw==/base.apk)
at androidx.wear.compose.material.DefaultTimeSourceKt.currentTime(DefaultTimeSource.kt:53)
at androidx.wear.compose.material.DefaultTimeSource.getCurrentTime(DefaultTimeSource.kt:42)
at androidx.wear.compose.material.TimeTextKt.TimeText(TimeText.kt:101)
...
注释掉TimeText()后项目可正常运行,当前targetSdk版本为34。
核心原因分析
这个错误本质是Compose Runtime库与Wear Compose Material库版本不兼容:mutableStateOf(J)(Long类型的可变状态创建方法)是Compose Runtime较新版本才引入的API,若Wear Compose Material依赖的Runtime版本高于项目实际引入的版本,就会出现方法找不到的情况。
初步排查方向
- 统一Compose相关依赖版本:确保
androidx.compose.runtime:runtime与androidx.wear.compose:wear-compose-material版本匹配,建议使用官方推荐的配套版本。 - 检查依赖冲突:执行
./gradlew app:dependencies(或通过Android Studio的Gradle工具窗口查看依赖树),确认androidx.compose.runtime:runtime的实际依赖版本是否符合Wear Compose Material的要求。 - 更新到最新稳定版:尝试升级Compose和Wear Compose到官方最新稳定版本,消除API兼容问题。
需要补充的信息
为了精准定位问题,需要你提供以下内容:
- 项目根目录
build.gradle/build.gradle.kts中配置的Compose BOM版本(如果使用) - app模块
build.gradle/build.gradle.kts中所有Compose相关依赖声明,包括androidx.compose.runtime:runtime、androidx.wear.compose:wear-compose-material等 - 项目使用的Android Gradle Plugin(AGP)版本
内容的提问来源于stack exchange,提问作者Peter McLennan

