如何完成 View 应用到 Jetpack Compose 的迁移:sunflower 完整拆解 如何完成 View 应用到 Jetpack Compose 的迁移sunflower 完整拆解【免费下载链接】sunflowerA gardening app illustrating Android development best practices with migrating a View-based app to Jetpack Compose.项目地址: https://gitcode.com/gh_mirrors/su/sunflower手头的 View 应用由 XML 和 Fragment 堆成想换 Compose 又怕推倒重来。sunflower 是一个园艺应用把 View 应用到 Jetpack Compose 的迁移拆成了可复现的路线照着走一遍就能套到自己的项目上。项目定位View 应用改写成 Compose 的完整路线sunflower 的定位写在 README 里一个园艺 App演示如何把 Material 2 的 View 应用迁到 Material 3 的 Compose。它的价值不在园艺功能而在迁移路径本身——Gallery、Garden、Home、PlantList、PlantDetail 五个页面逐个重写最后把 Fragment 导航整体换成 Navigation ComposeFragment 全部移除。注意它的改动范围数据层的 Room、Repository、WorkManager 基本不动只动 UI 层。对想迁移自家项目的团队来说这就是刀口大小的参考不用连数据库一起重做。 理解核心把界面当「报菜名」传统 View 像亲自下厨XML 先把每道菜的盘子摆好代码里 findViewById 再端菜上桌数据一变得手动找到对应控件去改。Compose 更像报菜名你只描述客人看到什么——列表数据是这几行界面就该长这样框架负责把画面重新画出来。每个屏幕就是一个 Kotlin 函数输入状态输出界面状态一变函数重跑一次。这个差别直接决定迁移顺序先搬单个页面再换导航而不是先推翻整套 XML 体系。 五步跑通迁移示例第 1 步拉代码先跑起来一条命令git clone https://gitcode.com/gh_mirrors/su/sunflower用 Android Studio 打开直接 Run。验证App 能进首页并显示植物列表数据来自本地 assets/plants.json不需要联网。第 2 步补一个 Unsplash key画廊页的图来自 Unsplash APIkey 要写进 gradle.properties放项目根目录或用户目录 ~/.gradle/gradle.properties 都行unsplash_access_keyyour Unsplash access key这一行就是全部配置。验证点进详情页再进画廊能加载出图片不配 key 时 App 也能运行只是进不了画廊别把这一点误判成迁移失败。第 3 步按迁移路线读文档先读 迁移路线文档整个迁移分三段定策略、逐屏迁移、换导航并删除 Fragment。验证你能对着文档说出五个页面的迁移顺序以及每段对应的完成状态。第 4 步挑一个页面看实现打开 Compose 界面源码garden、plantlist、plantdetail、gallery、home 五个子目录对应五个已迁移的屏幕。验证挑 plantlist 看列表界面全是 Composable 函数res/layout 下只剩 item_plant_description.xml 一个文件那是给后面要讲的 AndroidViewBinding 用的。第 5 步看导航怎么切换路由定义集中在 路由文件每个页面一段data object PlantDetail : Screen( route plantDetail/{plantId}, navArguments listOf(navArgument(plantId) { type NavType.StringType }) ) { fun createRoute(plantId: String) plantDetail/${plantId} }原来的 nav_graph XML 换成了这种字符串路由参数也声明在代码里。验证运行后从首页点进详情页、再进画廊plantId 和 plantName 两个参数都能正确带过去返回键行为不变。⚠️ 新旧写法对照顺便避开三个坑环节View 旧写法Compose 新写法布局XML 文件 findViewByIdComposable 函数数据刷新手动 setText 或监听回调状态变化触发重组页面跳转Fragment Navigation XML 图NavHost 路由字符串视觉风格Material 2Material 3三个容易踩的坑key 没配就怀疑代码坏了。症状是画廊进不去实际只差 gradle.properties 里那一行见第 2 步。HTML 文案变乱码。Compose 的 Text 渲染不了 HTML 标签植物介绍里的加粗会原样显示。项目在 植物详情页源码 里用 AndroidViewBinding 嵌了一个 TextView 解决这个 Composable 就叫 PlantDescription。页面没迁完先换导航。旧页面还依赖 Fragment 导航图时提前删 Fragment 会直接崩。迁移路线文档也把换导航放在最后一步五个页面全部迁完才动它。 三条进阶建议对比改动幅度checkout 仓库的 views 分支那是迁移前的 View 版本可逐文件 diff。每个新 Composable 顺手补 UI 测试androidTest 目录里 createComposeRule 的写法可以直接抄。冷启动别凭感觉用 macrobenchmark 模块现成的任务生成 Baseline Profile再看数据。想继续深入从仓库里的 docs/MigrationJourney.md 读起README 也说明了后续 Compose 写法以官方 compose-samples 示例集为准。【免费下载链接】sunflowerA gardening app illustrating Android development best practices with migrating a View-based app to Jetpack Compose.项目地址: https://gitcode.com/gh_mirrors/su/sunflower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考