ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

手机开发与设计流程详解:从需求到上线的完整链路

手机开发与设计流程详解:从需求到上线的完整链路

简介:这份PPT资料围绕手机开发与设计流程展开,面向硬件工程师、产品经理及通信专业学生,帮助读者系统理解从产品构想到量产退市的完整链路。内容以明基BenQ移动通信事业群的项目实践为蓝本,依次拆解构想、评估规划、设计、研发执行、实验室试产、工程试产、预量产、大规模生产与结束九个阶段,并延伸至外观、机构、基频、射频、天线与软件等开发功能区,以及3G演进和无线通信趋势。资源包内含1个pptx文件,约4.16MB,以幻灯片形式呈现流程框架与阶段职责划分,便于直接用于培训或自学。目前已有158人学习,适合希望建立手机研发全局视角、了解代工到品牌转型案例的读者参考。

1. 手机开发与设计流程详解:从需求到上线的完整链路

很多人第一次接触移动端项目时,会以为“手机开发”就是打开 IDE 写界面、调接口、打包上架。真到项目里才发现,真正拖慢进度的往往不是代码,而是流程没理顺:需求评审完没冻结,UI 稿改了六版,接口字段对不上,测试机型和系统版本覆盖不全,最后卡在应用商店审核。手机开发与设计流程详解这件事,核心不是讲某个框架怎么用,而是把一条从需求到上线的链路拆成可执行、可验收、可回溯的节点。它适合刚接手移动端项目的开发者、需要和设计/测试/运营协作的技术负责人,以及想把“野路子开发”变成“可复现流程”的小团队。下面按我实际做项目的顺序,把每个阶段该产出什么、参数怎么定、哪里容易翻车讲清楚。

2. 需求与信息架构:先定边界再画界面

2.1 需求冻结前必须产出的三份东西

移动端项目最怕“边做边加”。我一般要求需求阶段至少产出三份材料:功能清单、页面流转图、字段字典。功能清单不是把老板的话抄一遍,而是按“用户角色—场景—操作—结果”拆到可验收粒度。页面流转图用纸笔或任意绘图工具都行,关键是标出入口、返回、异常分支。字段字典最容易被忽略,但它决定了后面接口联调会不会反复。

产出物最小内容验收标准
功能清单角色、场景、操作、结果每条能对应一个测试用例
页面流转图主路径、异常路径、返回逻辑无“死胡同”页面
字段字典字段名、类型、必填、默认值前后端各持一份,版本一致

字段字典建议用表格维护,字段名统一小驼峰或下划线,不要混用。必填项要写清“为空时前端提示什么、后端返回什么错误码”。这一步多花两小时,联调时能省两天。

2.2 信息架构怎么定才不返工

信息架构决定用户能不能在三次点击内到达核心功能。我的做法是先列“用户最高频的三个任务”,再把它们放到一级入口。比如工具类应用,核心任务通常是“新建、查看、导出”,那底部导航就围绕这三个展开,而不是按“首页、消息、我的”这种模板硬套。

定架构时用卡片分类法:把功能写成卡片,让非开发同事分组,观察他们怎么归类。分组结果和你的预期不一致,往往说明命名或层级有问题。架构定完后,用低保真线框图走一遍主路径,不要急着上色。线框图阶段改一版成本几乎为零,高保真阶段改一版可能牵动切图和标注。

提示:需求评审会上如果有人说“这个先做着,后面再改”,把它记成风险项,并在排期里预留至少 15% 的缓冲。

3. 视觉设计与切图交付:让 UI 稿能直接进代码

3.1 设计稿标注的四个关键参数

UI 稿再好看,如果标注不清,开发照样翻车。我要求设计稿必须标四类参数:间距、字号、色值、圆角。间距用 4 或 8 的倍数,字号至少给出大标题、正文、辅助文字三档,色值给十六进制,圆角给具体数值。不要写“差不多 12 像素”,移动端 1 像素偏差在低密度屏上就是肉眼可见的错位。

{ "component": "primary_button", "height": 48, "padding_horizontal": 24, "font_size": 16, "font_weight": 500, "color_bg": "#2F6BFF", "color_text": "#FFFFFF", "radius": 8, "disabled_bg": "#B8C7E0" }

上面这份 JSON 是我常用的组件标注格式。height和padding_horizontal决定点击热区,移动端最小热区建议不小于 44×44。font_weight用数值而不是“加粗/常规”,避免不同平台渲染差异。disabled_bg这类状态色必须提前给,否则开发只能自己猜,最后和设计稿对不上。

3.2 切图命名与倍率:别让资源成为黑匣子

切图命名我坚持“模块_功能_状态@倍率”的格式,例如home_icon_search_normal@2x.png、home_icon_search_pressed@3x.png。倍率至少提供 2x 和 3x,低端机用 2x,高端机用 3x。如果项目只做一套,优先 3x 再压缩,但要注意内存占用。

# 批量检查切图尺寸是否符合倍率 # 假设设计稿基准宽度 375pt for f in *.png; do w=$(identify -format "%w" "$f") echo "$f width=$w" done

这段命令用 ImageMagick 的identify读取每张图宽度。375pt 基准下,2x 图宽度应为 750px,3x 应为 1125px。发现宽度对不上,要么是设计导出时选错倍率,要么是切图被二次缩放。二次缩放会导致边缘模糊,尤其在深色背景上很明显。

注意:图标类资源优先用矢量或字体图标,减少位图倍率维护成本。但矢量图标在低版本系统上可能有渲染差异,上线前要在真机抽验。

4. 开发实现与联调:把流程落到代码和接口上

4.1 工程结构怎么分才不互相踩脚

移动端工程结构我一般按“功能模块 + 公共层”分,而不是按“页面 + 工具”分。功能模块下再分pages、components、services、models。公共层放网络请求、存储、埋点、主题。这样多人协作时,每个人只动自己模块,减少冲突。

src/ modules/ home/ pages/ components/ services/ models/ profile/ pages/ components/ services/ models/ common/ network/ storage/ track/ theme/

services只负责调接口和做数据转换,不写 UI 逻辑。models定义数据结构,和字段字典一一对应。common/network统一处理超时、重试、错误码。这样后面换网络库或加拦截器,只改一个地方。

4.2 接口联调的三个约定

联调阶段最容易出现“前端说字段没给,后端说文档里有”。我的做法是定三个约定:第一,接口文档用同一份字段字典生成,不手写;第二,所有接口返回统一结构{ code, message, data };第三,错误码分段,比如 1000 段是通用错误,2000 段是用户相关,3000 段是业务相关。

// 统一请求封装示例 async function request(url, options = {}) { const config = { timeout: 10000, headers: { 'Content-Type': 'application/json' }, ...options, }; try { const res = await fetch(url, config); const json = await res.json(); if (json.code !== 0) { // 业务错误,交给调用方决定是否提示 throw new BizError(json.code, json.message); } return json.data; } catch (err) { // 网络错误或超时,统一上报 track('request_fail', { url, error: err.message }); throw err; } }

timeout设 10 秒是移动端常见值,太短容易在弱网下误报,太长用户等不及。BizError把业务错误和网络错误分开,调用方可以只处理业务错误提示,网络错误交给全局兜底。track上报失败事件,方便上线后排查是接口问题还是用户网络问题。

4.3 真机调试与性能基线

模拟器跑通不代表真机没问题。我要求至少在三种设备上跑:低端机、中端机、高端机,系统版本覆盖当前主流的大版本。性能基线看三个指标:冷启动时间、页面切换帧率、内存峰值。冷启动超过 2 秒就要查初始化任务,页面切换掉帧要看是不是在主线程做重计算,内存峰值持续上涨要查泄漏。

# Android 查看冷启动时间(需替换包名) adb shell am start -W -n com.example.app/.MainActivity

-W会输出TotalTime,这就是冷启动耗时。多跑几次取中位数,避免单次波动。iOS 用 Instruments 的 Time Profiler 看启动阶段耗时。发现某个初始化任务超过 200 毫秒,考虑延迟加载或放到子线程。

5. 测试、打包与上线:避坑与排查清单

5.1 测试阶段最容易漏的四个场景

功能测试大家都会做,但移动端有四个场景经常漏:弱网、断网重连、权限拒绝、后台切换。弱网用限速工具模拟,断网重连要看请求有没有重试和去重。权限拒绝要测“拒绝后再次进入是否还能正常用”,后台切换要测“切回来数据是否刷新、状态是否丢失”。

场景检查点常见问题
弱网请求超时、图片加载白屏无提示
断网重连重试、去重重复提交
权限拒绝引导、降级直接崩溃
后台切换状态恢复数据错乱

5.2 打包与签名:别在最后一步翻车

打包前确认三件事:版本号已递增、签名文件正确、混淆规则没误伤。版本号我习惯用主版本.次版本.构建号,构建号每次打包自动加一。签名文件不要提交到代码仓库,用环境变量或密钥管理。混淆规则里,反射调用的类、序列化模型、原生桥接方法必须保留。

# Android 打包示例(需替换路径和别名) ./gradlew assembleRelease \ -PversionCode=102 \ -PversionName="1.0.2" \ -PstoreFile=$HOME/keys/release.keystore \ -PstorePassword=$STORE_PASS \ -PkeyAlias=release \ -PkeyPassword=$KEY_PASS

versionCode必须是整数且递增,否则应用商店会拒。storePassword和keyPassword从环境变量读,不要写死在脚本里。打包后先装到真机跑一遍主路径,再上传。上传前用商店提供的自检工具扫一遍,能提前发现权限声明、隐私政策等问题。

5.3 上线后第一周看什么

上线不是终点。第一周重点看崩溃率、ANR 率、核心接口成功率、启动耗时分布。崩溃率超过 1% 就要定位,ANR 超过 0.5% 要查主线程。核心接口成功率低于 99% 要看是服务端问题还是客户端超时设置问题。启动耗时看 P90,不要只看平均值,平均值会被高端机拉低。

提示:埋点上报要加采样率,全量上报在用户量大时会影响性能。崩溃和关键路径全量,普通行为可以 10% 采样。

6. 把流程变成可复用的检查表

流程讲完,最后落到一个具体技巧:把每个阶段的验收项做成检查表,每次项目启动时复制一份,逐项打勾。检查表不用复杂,用 Markdown 或表格都行。我自己的检查表分五段:需求、设计、开发、测试、上线。每段下面列 5 到 8 条,每条写清“谁负责、产出什么、什么算通过”。

阶段检查项负责人通过标准
需求字段字典产品/开发前后端版本一致
设计切图倍率设计2x/3x 齐全
开发接口封装开发统一错误码
测试弱网场景测试无白屏无重复提交
上线版本号递增开发商店自检通过

这个检查表最大的价值不是“防止遗漏”,而是让协作方知道什么时候该交什么。我吃过最大的亏是一次项目里设计稿没标禁用态,开发自己配了一个灰色,上线后用户反馈“按钮像不可点”。后来我把“状态色齐全”写进检查表,再没出现过类似问题。另一个习惯是每次上线后把实际踩到的坑补进检查表,下一轮项目直接受益。流程不是越复杂越好,而是能让你在换项目、换团队时,依然知道下一步该做什么。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进