简介:这份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_PASSversionCode必须是整数且递增,否则应用商店会拒。storePassword和keyPassword从环境变量读,不要写死在脚本里。打包后先装到真机跑一遍主路径,再上传。上传前用商店提供的自检工具扫一遍,能提前发现权限声明、隐私政策等问题。
5.3 上线后第一周看什么
上线不是终点。第一周重点看崩溃率、ANR 率、核心接口成功率、启动耗时分布。崩溃率超过 1% 就要定位,ANR 超过 0.5% 要查主线程。核心接口成功率低于 99% 要看是服务端问题还是客户端超时设置问题。启动耗时看 P90,不要只看平均值,平均值会被高端机拉低。
提示:埋点上报要加采样率,全量上报在用户量大时会影响性能。崩溃和关键路径全量,普通行为可以 10% 采样。
6. 把流程变成可复用的检查表
流程讲完,最后落到一个具体技巧:把每个阶段的验收项做成检查表,每次项目启动时复制一份,逐项打勾。检查表不用复杂,用 Markdown 或表格都行。我自己的检查表分五段:需求、设计、开发、测试、上线。每段下面列 5 到 8 条,每条写清“谁负责、产出什么、什么算通过”。
| 阶段 | 检查项 | 负责人 | 通过标准 |
|---|---|---|---|
| 需求 | 字段字典 | 产品/开发 | 前后端版本一致 |
| 设计 | 切图倍率 | 设计 | 2x/3x 齐全 |
| 开发 | 接口封装 | 开发 | 统一错误码 |
| 测试 | 弱网场景 | 测试 | 无白屏无重复提交 |
| 上线 | 版本号递增 | 开发 | 商店自检通过 |
这个检查表最大的价值不是“防止遗漏”,而是让协作方知道什么时候该交什么。我吃过最大的亏是一次项目里设计稿没标禁用态,开发自己配了一个灰色,上线后用户反馈“按钮像不可点”。后来我把“状态色齐全”写进检查表,再没出现过类似问题。另一个习惯是每次上线后把实际踩到的坑补进检查表,下一轮项目直接受益。流程不是越复杂越好,而是能让你在换项目、换团队时,依然知道下一步该做什么。希望帮到你。
本文还有配套的精品资源,点击获取