淘一淘七载征途 技术深耕守本初

本系列为 Android 技术职场题材虚构小说,所有登场人物、公司名称、组织架构及相关情节均为创作所需虚构而来,若有雷同,纯属偶然。书中涉及的技术知识经专业梳理,仅供参考。

八)淘一淘七载征途 技术深耕守本初

第二天一早,小安踩着上班铃冲到了老杨工位前,身后的发束随着跑动轻快地扫过肩头,手里还攥着半杯没喝完的豆浆,语气里满是急切:"老杨老杨,昨天你讲到在淘一淘解决了商品列表等很多问题,后来呢?你在淘一淘还经历了啥?后来为啥来我们公司了?"

老杨刚打开电脑,正在加载开发环境,闻言抬眼笑了笑,故意调侃道:"这都上班点了,你不先去忙自己的事?没工作吗?"

小安把豆浆往桌角一放,眨了眨眼,理直气壮地说:"工作哪有听你讲职场经历、吃技术大牛的瓜重要!快说快说。"

老杨被她逗乐了,指了指旁边的空位:"行吧,先坐下来,别急。"

小安连忙拉过椅子坐下,眼神里满是期待。晓雅和阿泽、博文也陆续走到工位,听到两人的对话,纷纷围了过来------昨天老杨讲的职场经历,让这几个实习生都听得入了迷。

老杨指尖在桌面上轻轻敲击,像是在梳理那些在淘一淘跨越七年的技术印记,缓缓开口:"列表优化只是起点,真正的成长,是在一次又一次的项目迭代里熬出来的。"

......

2016年,老杨入职淘一淘的第一年。

......

当时淘一淘正面临一个棘手的问题:随着功能迭代,APP 的 APK 体积从最初的18M飙升到了90M,很多低内存机型用户反馈下载慢、安装后占用空间过大,卸载率居高不下。

技术总监王哥把优化 APK 体积的任务交给了老杨所在的小组,明确要求"在不削减核心功能的前提下,把体积压缩到60M以内"。

"这可不是简单删几个文件就能解决的。"小组开会时,组长敲着桌子强调,"大家先把 APK 包解压缩,分析清楚体积增长的根源。"

老杨主动承担了资源分析的工作。

他用 Android Studio 的分析工具拆解 APK,发现问题主要出在三个地方:一是未优化的图片资源占了近16M,二是引入的第三方库存在大量未使用的代码,三是包含了适配所有 CPU 架构的原生库。

"我有个思路。"老杨在第二次小组会上拿出了详细方案,"首先用 WebP 格式替换所有 PNG 和 JPEG 图片,这种格式压缩率比 PNG 高不少,而且画质损失很小;然后启用代码压缩工具,移除未使用的类和方法;最后通过 abiFilters 配置,配合应用市场分包策略,让用户只下载和自己机器 CPU 架构相关的安装包,剔除其他小众架构的原生库,进一步减小用户实际下载体积。"

方案得到了一致认可,但执行过程中却遇到了阻碍:第三方库中的部分代码通过反射调用,直接用 ProGuard 压缩会导致功能异常。

老杨熬夜研究 ProGuard 规则,逐一排查反射调用的类和方法,在配置文件中用 -keep 规则显式保留这些类和方法,终于解决了问题。

经过一个月的优化,APK 体积成功压缩到60.8M,下载转化率提升了17%。

王哥在部门例会上特意表扬了老杨:"优化不是蛮干,要精准定位问题,用对技术工具,这一点老杨做得很到位。"

这次优化让老杨对 Android 构建流程和资源管理有了深刻理解,也让他养成了"开发即优化"的习惯------后续开发新功能时,他总会提前考虑资源占用,避免再出现体积臃肿的问题。

16年末,团队做 Android 5.0 系统适配已过去一年多,项目虽早已落地收尾,但老杨发现不少同事对 ART 与 Dalvik 两种运行时的差异仍一知半解,后续开发中还时不时冒出适配相关的小问题。

为彻底打通这个技术堵点,帮团队夯实基础,部门专门组织了一场专题技术分享会。凭借扎实的适配经验和对运行时原理的深入研究,老杨主动接下了这次分享任务。

分享会上,老杨结合提前备好的流程图,把核心区别讲得条理清晰。

"Dalvik 用的是 JIT 即时编译,运行时才把字节码转成机器码,这种方式启动快,但运行效率不稳定;ART 则是 AOT 预编译,安装时就完成转换,虽然首次安装费点时间,但后续运行更流畅、功耗也更低。"

他还结合淘一淘 APP 的真实运行数据,拆解两种运行时对性能的实际影响,讲解得通俗易懂,让在场同事都能听明白。

分享一结束,王哥率先起身鼓掌,赞许道:"老杨把复杂的底层逻辑讲得明明白白,还贴紧咱们的业务场景,这趟分享全是干货!"

这场分享也让老杨在部门内的技术话语权更扎实了。

时间一晃来到2017年,入职淘一淘两年的老杨已能独立承接核心任务。

这一年,淘一淘计划推出"离线缓存"功能,用户可在 WiFi 环境下缓存商品数据,离线时也能查看,这个功能的核心难点是文件系统的安全与高效管理,老杨再次挑起重担。

"用户缓存的商品数据包含价格、详情等敏感信息,必须保证安全,同时要考虑不同设备的存储情况,避免占用过多空间。"老杨在需求评审会上说道。

他深入研究了 Android 文件系统的分区结构,最终决定将缓存数据存储在 /data 分区的应用私有目录下------这里的文件只有当前应用可访问,符合安全要求,更关键的是,应用私有目录无需申请任何存储权限,这对开发来说是极大利好,能避免权限申请被用户拒绝的问题。

同时,他设计了一套针对内存缓存的管理策略:通过 ActivityManager 监控设备内存状态,低内存时自动清理过期缓存;限制单个用户的缓存上限,超过上限则按"最近最少使用"原则删除数据。

"离线缓存"功能上线后广受好评,用户离线使用时长提升了25%,更重要的是,由于采用了严格的文件安全策略,没有出现任何数据泄露问题。这次项目让老杨对 Android 文件系统的权限控制和安全模型有了更深入的理解。

2018年,淘一淘的用户量突破1亿,多进程管理成为制约体验的技术瓶颈------当时应用的多个组件运行在同一个进程中,导致内存占用过高,在低配置机型上频繁被系统杀死。

老杨主导了多进程优化项目,他在 AndroidManifest.xml 中通过 android:process 属性,将后台下载服务、推送服务等组件分配到独立进程中:"这样一来,不同功能模块的进程相互隔离,即使后台服务进程被杀死,也不会影响前台 UI 的正常运行。"

但多进程也带来了新的问题:进程间的通信和数据共享变得复杂。

老杨调研后,选择用 ContentProvider 实现进程间的数据共享,这是 Android 系统提供的跨进程通信组件,支持对集中式数据库的读写,安全性和稳定性都有保障,很适合当前的应用场景。

同时,他还优化了进程优先级管理:通过提升前台 UI 进程的优先级,确保用户交互时不被系统杀死;对后台进程设置合理的保活策略,既保证核心功能正常,又不占用过多系统资源。

多进程优化后,淘一淘 APP 的内存占用降低了15%,后台服务的稳定性提升了60%。

此时的老杨,已经成长为淘一淘技术部的资深工程师,能够独立主导核心项目的技术方案设计。

时间推进到2021年8月,距离老杨2016年入职淘一淘已经六年。

这一年,行业内迎来了一项关键政策调整:Google 正式发布强制要求,所有新上架 Google Play 的应用必须采用 AAB 格式提交,不再接受传统 APK 上传;即便已上架的存量应用,后续更新也会逐步收紧限制,最终全面切换到 AAB格式。

作为需要出海布局的电商平台,淘一淘必须紧跟政策要求完成格式迁移,老杨主动牵头推进淘一淘 APP 从 APK 向 AAB 的迁移。

他带领团队梳理应用的模块结构,将不同配置的资源和代码拆分成独立的 bundle,并针对非 Google 应用商店的分发场景,制定了"双格式并行"的方案------Google Play 分发 AAB ,其他渠道仍保留优化后的 APK。

迁移过程中,他们遇到了资源拆分不彻底、部分模块兼容性差等问题,老杨带领团队逐一攻克,最终成功完成迁移。

迁移后,用户通过 Google Play 下载的淘一淘 APP 平均体积减小了28%,下载转化率也因此再次提升。

"这近六年,就像跟着 Android 系统和行业规则一起成长。"

老杨的思绪拉回现实,语气中满是感慨,"从2015年刚入职时优化列表项性能,2016年钻研 APK 优化起步,之后又陆续跟进了一系列技术迭代项目,最后响应 Google 政策推进 AAB 迁移。这一路遇到了不少挑战,但每一次攻克难题,都是一次扎实的成长。"

博文恍然大悟:"杨哥,原来你说的'技术不是孤立的'是这个意思!优化 APK 体积要结合资源优化和代码压缩,做多进程优化还得懂跨进程通信组件的选型,这些知识点都是相互关联的。"

"没错。"老杨点点头,"这也是我把经验文档发给你们的原因,里面不仅记录了我踩过的坑,更梳理了每个技术点的关联逻辑。"

就在这时,老杨的Q书响了,是林卓发来的消息:"老杨,多谢你的指导和鼓励,我一定可以!"

老杨笑着回复:"哈哈,你成长了!遇到问题随时沟通。"

回复完消息,老杨看向眼前的实习生们:"技术成长没有捷径,都是在一次又一次的项目实践中积累起来的。你们现在多学多练,把基础打牢,以后遇到复杂问题自然能从容应对。"

话音刚落,小安忽然想起昨天没问完的问题,眼神亮晶晶地追问:"杨哥,你在淘一淘待了六年,从新人成长为资深工程师,按理说发展得顺风顺水,怎么最后会跳槽来我们公司呀?"

听到这个问题,老杨的思绪瞬间被拉回2021年 AAB 迁移完成后的那段日子,那些关于技术与业务的挣扎和矛盾清晰浮现。

他的眼神暗了暗,指尖无意识地摩挲着搪瓷杯的杯壁,沉默了几秒才缓缓开口:"主要是后期淘一淘的发展方向,和我对技术的追求越来越相悖了。"

"2021年顺利完成 AAB 迁移后,凭借这些年在核心项目中的突出贡献,22年初我正式晋升为 Android 客户端架构师。"

本以为能有更大权限推动技术优化,没想到公司的重心却在这之后彻底偏向了业务流,尤其是疯狂叠加各类引导消费者消费的功能。这些功能看似能快速提升营收,却让我带领团队亲手优化到流畅的 App 变得越来越臃肿,之前耗费大量心血的性能优化成果,几乎被消耗殆尽。

一旁的阿泽好奇地追问:"引导消费具体是怎么实现的呀?跟之前学到的有关系吗?"

"当然相关,而且很多就依托在之前做的多进程架构里。"老杨点头,语气里带着几分无奈。

"等用户打开 App 搜索购物时,系统就会根据这份个人画像,在搜索结果里插入一部分推荐商品。这些商品根本不是用户原本想要搜索的品类,却会被算法包装得格外吸引人------比如用大幅优惠标签、'千人千面专属推荐'的话术,再配上高清的宣传图,就是为了让用户忍不住点进去。"

"这些推荐商品的商家,会给公司支付高额的广告费,排名越靠前,费用越高。为了多赚广告费,后期插入的推荐商品越来越多,有时候用户搜一件商品,前半页全是推荐,真正需要的结果反而被压到了后面。"

晓雅皱了皱眉:"这样一来,用户体验不就变差了吗?而且后台一直运行个人画像服务,肯定会增加内存占用和功耗吧?"

"你说的没错。"老杨叹了口气,"我当时就提出,要控制推荐商品的数量,还要优化个人画像服务的运行策略,避免过度占用资源。但领导根本不听,还说我'只懂技术不懂业务',让我只管保证功能正常运行,不用管优化的事。"

"那段时间,公司还在不停地加新的营销功能,一会儿加弹窗式优惠券提醒,一会儿加限时秒杀的倒计时悬浮窗,还有各种分享助力的弹窗。这些功能大多是紧急上线,代码写得很粗糙,还要求必须常驻前台,根本没有优化的空间。"

"我做了六年的性能优化,就是想让 App 跑得更流畅、用户用得更舒服。可看着自己亲手优化的架构,被这些臃肿的营销功能一点点拖垮,用户反馈的卡顿、闪退问题越来越多,我心里特别难受。"

"最后一次争吵,是因为一个'全域弹窗推送'的功能。领导要求不管用户在使用哪个页面,只要符合营销条件,就必须弹出推送窗口。我坚决反对,说这个功能会严重影响用户体验,还可能导致支付流程中断,引发用户投诉。"

"但领导根本不考虑这些,只盯着 KPI 和广告费,还说我'阻碍公司发展'。我和他吵得很凶,我说'技术应该服务于用户,而不是成为收割用户的工具'。吵完之后我就想通了,在那里继续待下去,根本实现不了我的技术追求,所以第二天就提交了辞职申请。"

老杨话音毕,众人安静了好一会儿。

阿泽忍不住小声感叹:"老杨你也太刚了吧!敢直接跟领导这么硬刚,换我肯定没这个勇气。"

博文也点点头:"是啊,为了坚持技术初心放弃稳定的架构师岗位,太佩服了。"

小安身后的发束轻轻晃了晃,眼神里满是敬佩,随即又带着好奇追问:"那老杨,你跳槽来咱们 ByteFlow 之后,感觉咋样呀?会不会比在淘一淘舒服些?"

提到现在的工作,老杨紧绷的神色柔和了些,嘴角泛起一丝浅笑:"感觉还好,ByteFlow 的氛围更务实,不会为了短期营收牺牲用户体验,技术决策也更尊重工程师的专业意见,没那么不近人情。"

说着,他话锋一转,看向几个实习生认真叮嘱:"不过你们可别学我当初那样冲动辞职。我当时也是年轻气盛,脑子一热就提交了辞职申请,现在回想起来其实挺危险的------裸辞之后的职业空窗期、新工作的不确定性,都是要承担的风险。"

"认真想想,当初的问题未必没有更好的解决方案。比如我可以试着找领导做更详细的利弊分析,用数据证明过度营销会导致用户流失;也可以联合团队里有相同想法的同事一起推动改变,而不是一味硬碰硬。冲动辞职,其实是不负责任,也是最冒险的选择。"

"比如我可以试着找领导做更详细的利弊分析,用数据证明过度营销会导致用户流失;也可以联合团队里有相同想法的同事一起推动改变,而不是一味硬碰硬。冲动辞职,其实是不负责任且最冒险的选择。"

阳光透过落地窗洒在几人的身上,将他们的身影拉得很长。办公区的键盘敲击声渐渐密集起来,新的技术故事,正在这里悄悄开启。

而另一边,刚收到老杨鼓励的林卓,正对着电脑屏幕上复杂的项目需求眉头紧锁------一场属于他的技术挑战,已悄然拉开序幕。

相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work4 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work4 天前
ch21 签名、校验与发版
kotlin
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui