96SEO 2026-08-04 09:14 13
年初,我们将拥有超过 1000 个页面的 Android 应用从 Navigation 2 迁移到了 Navigation 3。

Navigation 3 引入了类型安全的目标位置、持久化的返回栈还有更现代化的导航 API。虽然整体迁移相对顺利,但我们仍然遭遇了不少意想不到的挑战——包括底部表单处理、发布后才出现的崩溃还有大量合并冲突导致的**加班**和**紧急修复**。
我们的应用开发于 2021 年。导航基础基于 Jetpack Compose Navigation,当时该方案仍相对新颖且未完全稳定。
底部表单也是基于当时的导航框架实现的。Navigation 3 的出现彻底重新定义了我们的导航方式。
在权衡技术债务与未来机遇后我们把这次迁移视为对网站的一项长期投资,而非简单升级库。
我们清楚迁移会带来风险、影响范围广还有潜在回归问题。但推迟只会让技术债务进一步累积,未来迁移成本更高。
val navigationState = rememberNavigationState(
startKey = MainScreenPointScreen,topLevelKeys = setOf
)
val navigator = remember { Navigator }
N 3 稳定版发布后我立刻在下个冲刺创建了调研任务,以评估可行性、受影响区域及风险。至于结果显示,增量迁移不可行——只能一次性搬完所有页面否则会产生兼容性灾难。
随后我被指派专门进行两周的大型“迁移冲刺”。所有页面手动重写为 Nav 3 API。按理说,尝试使用 AI自动转换,但因旧代码高度定制化。AI 常常产生不一致甚至错误的 Nav 2 代码。最终,我独自完成了全部工作,用时约两周——期间每日加班。但团队仍在并行开发新功能,这导致大量合并冲突。说起来,
Pain Point: 大规模重构必然伴随合并冲突。 我们决定在迁移期间不冻结业务开发,以免影响业务收入。只是当我手动重写每个页面时同事们仍在旧导航上提交新功能。结果是冲突频发,解决冲突所耗时间远超预期。
N 3 并未提供直接通过导航显示底部表单的方案。我不得不自行包装 ,在 metadata 中标记为底部工作表。并使用 ModalBottomSheetLayout 渲染:
val NavEntry.isBottomSheet: Boolean
get = metadata as?Boolean == true
inline fun EntryProviderScope.bottomSheetEntry(
noinline content: @Composable -> Unit,) {
entry(
metadata = mapOf。content = content
)
}
NavDisplay(
entries = navigationState.toEntries
.filter { it.isBottomSheet.not },onBack = { navigator.goBack },)
This was a temporary workaround;later we replaced it with official “SceneStrategy” solution.
The migration gave us an opportunity to clean up deep‑link handling.
composable(
deepLinks = "$uri/${ScreenName.PROFILE.value}/?$PROFILE_ID={$PROFILE_ID}"
"&$EVENT_CONTEXT={$EVENT_CONTEXT}"
"&$EVENT_ANCHOR={$EVENT_ANCHOR}"
"&$ENTRY_POINT={$ENTRY_POINT}"
"&$STREAM_ID={$STREAM_ID}",route = profileRoute,arguments = profileArguments,) { ProfilePreview }
@Serializable
data class ProfilePreviewPointScreen(
override val deepLinkPath: String = "${ScreenName.PROFILE.value}"
) : NavKey。DeepLinkableEntry) {
entry -> ProfilePreview
}
This centralized approach dramatically simplified maintenance and debugging.
The regression test suite and bug‑fix effort consumed roughly one and a half weeks. Automated tests uncovered many hard‑to‑reproduce issues that would have orwise slipped into production.
The rollout began with a small % of users via Crashlytics monitoring. Crashes appeared almost immediately.
N 3 要求所有通过导航传递的参数必须可序列化。我们在阻塞使用者场景中传递了一个自定义 NavKey,导致 Kotlinx.serialization.SerializationException.
data class BlockUserRoute
@Serializable
open class NavStateSerializable : NavKey
// Hotfix applied → second release succeeded
The built‑in Bottom Sheet solution via “SceneStrategy” replaced our ad‑hoc wrapper,making codebase far cleaner.
成功评估标准:
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback