KMM项目中适配Android与iOS的Navigation Compose兼容版本咨询
核心报错原因
你的iOS端崩溃是因为引入了Android专属的Jetpack SavedState API:SavedStateRegistryController.performRestore是Android平台特有的类方法,iOS平台没有对应的实现,导致链接失败。这不是单纯的版本兼容问题,而是依赖选择错误——你使用的是Android-only的androidx.navigation:navigation-compose,而非适配KMM的Compose Multiplatform导航库。
修复步骤及最优版本组合
1. 替换导航依赖
移除原有的Android专属navigationCompose,改用Compose Multiplatform官方的导航库:
[versions] # 新增Compose Multiplatform导航版本 composeNavigation = "1.9.3"
在[libraries]块中添加:
compose-navigation = { module = "org.jetbrains.compose.navigation:navigation", version.ref = "composeNavigation" }
并在多平台模块的sourceSets中为commonMain引入该依赖,而非仅限定Android平台。
2. 匹配兼容的全项目版本组合
以下是适配Kotlin 2.1.21、同时支持Android和iOS的稳定版本组合:
[versions] agp = "8.6.0" android-compileSdk = "35" android-minSdk = "24" android-targetSdk = "35" androidx-activity = "1.9.3" androidx-appcompat = "1.7.1" androidx-core = "1.17.0" androidx-espresso = "3.7.0" androidx-lifecycle = "2.8.4" androidx-testExt = "1.3.0" composeMultiplatform = "1.9.3" junit = "4.13.2" kotlin = "2.1.21" material3 = "1.2.1" googleServices = "4.4.4" gitliveFirebase = "1.13.0" googleFirebase-common = "21.0.0" googleFirebase-firestore = "25.0.0" kotlinxSerializationJson = "1.7.3" datastore ="1.1.1" kotlinx-datetime = "0.7.1" multiplatform-settings = "1.1.1" composeNavigation = "1.9.3"
3. 额外注意事项
- 所有Compose相关依赖(导航、Material3等)的版本必须与
composeMultiplatform完全一致,避免版本差异引发兼容问题 - 检查项目common代码中是否直接调用Android Jetpack SavedState相关逻辑,若有需通过
expect/actual封装为Android平台专属实现,禁止在跨平台代码中引用Android专属API
内容的提问来源于stack exchange,提问作者Zinfine
相关产品推荐
相关产品推荐

