Android 工程师的模块化方案与落地
把一个大型应用拆分成边界清晰的功能模块和核心模块,针对一个正在运行的应用分阶段完成,而不是一次冒险的全盘重写。
已经拥有一个正常运行的 Android 应用,并有团队定期为其发布新功能的企业,面对的是与首次构建应用的企业完全不同的问题。这正是企业在迪拜招聘 Android 工程师的原因:不是为了编写下一个界面,而是为了解决那些让每个界面构建起来都比上一个更慢的问题,一次本应几秒钟却要几分钟的构建,一个每项功能都得触碰的单一模块,或者一条没人能说清上一次糟糕发布究竟是哪次改动导致的发布流程。
Android 官方架构文档把这视为一个真实、有专门名称的问题,建议进行关注点分离、采用分层结构,并在代码库足够庞大时,将其模块化为松耦合的部分,以获得可复用性、更严格的可见性控制和更快的构建速度。一位在迪拜真正值得聘用的 Android 工程师,是真正在一个正在运行的线上应用上做过这类重构的人,而不仅仅是读过相关指南,因为这项工作的风险在于,在努力让代码库更易于维护的同时,可能会给真实用户带来故障。
这个职位负责构建什么
有明显前后对比的平台级工作,而不是面向用户的新功能。
把一个大型应用拆分成边界清晰的功能模块和核心模块,针对一个正在运行的应用分阶段完成,而不是一次冒险的全盘重写。
诊断出真正拖慢速度的原因,无论是模块结构、Gradle 配置还是不必要的重新编译,并针对具体成因加以解决,而不是简单地堆更强的机器。
基于 Baseline Profile 和 Macrobenchmark,对应用启动、导航和滚动等真实用户使用流程进行测量,聚焦真正对用户重要的路径。
分阶段发布、与每次发布绑定的崩溃和运行状况监控,以及一份在糟糕发布真正发生之前就已商定好的回滚方案,而不是事后临时想办法。
引入或整理依赖注入方案,通常是 Hilt,让组件能够独立测试,而不必只能通过整个应用来测试。
写清楚模块边界、职责归属和构建规范,让整个团队在合作结束后都能遵循,而不是知识只留在一个人脑子里。
需要关注的技能
要看平台级工作的深度,而不只是功能交付能力。
| 技能或工具 | 优秀的表现是什么样 | 为什么重要 |
|---|---|---|
| 模块化判断力 | 能解释一个真实决定:为什么把两样东西留在同一模块,而不是拆开,而不仅仅是热衷于把一切都拆分 | Android 官方指南提醒,拆得过细本身也会带来额外开销 |
| 构建性能诊断 | 在改动任何东西之前,使用 Gradle build scan 和性能分析工具找出真正的瓶颈 | 凭猜测处理缓慢的构建会浪费时间,甚至可能让情况变得更糟 |
| Baseline Profile 与 Macrobenchmark | 已经在真实应用上配置过这些工具,能说清楚分析的是哪些关键用户流程 | 针对错误流程建立的 profile,对真正重要的指标几乎没有帮助 |
| 发布工程 | 熟悉分阶段发布、Play Console 运行状况数据,并提前商定好回滚方案 | 如果发布纪律松散,平台级改动会给一个线上应用带来真实风险 |
| 与功能团队沟通 | 能向未参与决策的开发人员解释清楚一次结构性改动 | 团队其余成员不理解的平台级工作,往往会被慢慢推翻 |
Google 官方的 Baseline Profiles 文档 明确指出,profile 必须基于未经混淆的构建版本生成,然后再对照真实的、经过混淆的发布构建版本进行验证,这是一个值得在迪拜聘用任何 Android 工程师从事这类工作之前,请他们凭记忆解释清楚的细节。
与我们合作的方式
专属 Android 工程师适合拥有持续运营应用、且积压了一批结构性问题的企业,与您的功能团队按固定频率并肩工作,而不是一次性的修复。限定范围项目适合一项明确的平台级工作,例如对一组指定功能进行模块化,或推行 Baseline Profile 部署,交付内容包括文档和完整交接。咨询服务适合希望在投入工程时间之前,先获得一份独立、有经验的意见,判断现在是否该做模块化、构建时间问题实际有多严重,或近期某次发布事故的真正原因。招聘支持对这个具体职位来说不太常见,因为大多数合作都是有明确终点的结构性工作。
评估候选人
聚焦线上代码库判断力的检查方式,而不是一次从零开始的练习。
他们在一个正式上线的应用上改善过的具体构建时间、应用体积或启动指标,带着真实数字,而不是笼统地说“改善了性能”。
他们决定不再进一步拆分某项内容的一个案例,以及原因,比一份成功拆分的清单更能说明判断力。
请他们展示两个模块之间实际如何通信,以及哪些内容被有意在两者之间保持私有。
当时的回滚方案是什么,他们通过分阶段发布数据多快察觉到问题,以及之后流水线做了哪些改动。
一位优秀的候选人能用产品经理或初级开发人员也能听懂的方式,描述一次结构性改动,而不只是用 Gradle 配置的语言。
认证
目前没有专门针对这类平台级工作的厂商考试。
Google 的 Android 开发人员认证项目多年来有所调整,目前并没有专门针对模块化、构建性能或发布工程的考试,因此这不是您在迪拜招聘 Android 工程师从事这类具体工作时能够核实的凭证。
来自真实应用的真实数据、您能阅读并提问的模块边界,以及对一次出问题的发布及其后续改动的清晰说明,比一张证书更能说明一个人是否真正能做好这项工作。
阿联酋相关考虑
在这类重构工作中经常出现的一个方面。
如果一次模块化或重构涉及处理客户或员工数据的代码,《2021 年第 45 号联邦法令》(Federal Decree Law No. 45 of 2021,阿联酋联邦数据保护法)在整个改动过程中始终适用于这些数据,因此您在迪拜招聘的任何 Android 工程师,在重构期间对待数据处理代码的谨慎程度,都应该和功能团队从零构建时一样。
模块化改造前原本正确的从右到左阿拉伯语支持,改造之后应该逐屏重新测试,因为在模块之间移动代码,可能会悄悄改变资源或布局方向的解析方式,这是在聘请迪拜的 Android 工程师执行这次拆分之前,值得提出的一项合理检查。
这个职位属于我们 移动开发 类别的一部分,也是更大范围的 迪拜招聘开发人员 板块的一部分。如果您需要在同一个应用上构建新功能,而不是重构现有应用,我们的 Android 开发工程师 页面是这个角色的日常对应版本,而跨平台产品另一端相同的平台级工作,则收录在我们的 iOS 工程师 页面。如果代码库横跨多个应用或平台,问题更偏向架构层面,而不只是某一个 Android 应用的内部结构,我们的 移动解决方案架构师 页面涵盖这种更宏观的视角,如果这次重构工作归根结底首先是一个语言层面的问题,Kotlin 开发工程师 页面也值得一读。
直接解答
在本站,我们的 Android 开发工程师页面涵盖逐个功能地构建并发布应用到 Google Play。本页面涵盖的是一个大型、成熟的 Android 代码库在此基础上还需要的平台级工作:把一个庞大的单体应用拆分成多个模块,解决构建或启动缓慢的问题,以及运行一条能在真实用户遇到问题之前先发现问题的发布流水线。
Android 官方架构指南将模块化描述为把代码库组织成松耦合、自成一体的部分,主要目的是提升可复用性、更严格的可见性控制、更快的构建速度和更清晰的所有权划分。当单一模块开始拖慢整个团队时,这项工作才值得去做,而不是每个应用都自动需要,其官方文档也提醒不要拆分得过细或过晚。
这是一个文件,告诉 Android 运行时哪些代码路径应该提前预编译,而不是在后台逐步优化,Google 官方文档指出,它能让应用首次启动的性能提升约 30%。对于启动速度或早期滚动流畅度会影响留存的应用来说,这项一次性配置通常是值得的。
可以,这是最常见的合作方式。模块化、构建速度和发布流水线改造这类平台级工作,通常由专门专注这方面的人负责,与持续发布新功能的团队并行开展,而不是暂停功能开发来做这件事。
现阶段可能还不需要。当一个代码库规模大到构建时间、模块边界或发布稳定性真正拖慢团队时,这个职位才值得投入,对于处于更早期阶段的应用,我们的 Android 开发工程师页面更直接对应这种情况。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。