过往的记录与总结
Comment简介
从16年9月正式踏入软件行业,转眼至今已经7年半,历经杭州和上海2座城市的4家公司,其中有工作了长达4年多的,也有短短几个月就选择离开的;
也许是运气使然,16年时第一家公司就是做车载方向的,那时候对车载并没有什么概念,国内的汽车行业也未像这几年一样火热,在这家公司工作了四年之多后,才发现市场上车载开发已经是一个新的主要方向,之后也便一直在这个方向的公司工作,
在这四家公司中,有车厂的一级供应商,也有车厂,甚至在最后的那家公司还经历了一段时间人力外包驻场到其他一级供应商工作的经历,也算是经历和感受了各种不同的公司与团队;
2016/09 - 202102 杭州鸿泉
回想这几年,印象最深的无疑是第一家工作了四年多的公司,从初入行业的新人到熟练然后能独当一面并带领其他人,一路走来的记忆都还历历在目.
这是一家只做商用车方向的公司,最初做的是商用车的嵌入式终端,之后才有车载中控屏的业务,最开始的是wince,在16年初时才建立Android团队,而我有幸在项目初期加入到了其中,也在其中和团队一起成长,
虽然这家公司在商用车方面已经做了好几年了,但由于这家公司是做嵌入式终端起家的,其他部门的业务其实都是单片机或linux终端相关的,Android方面的上层并没有什么积累,于是我们基本是从头开始摸索Android上层在车载方向的开发工作;
回顾那四年多的时间,整理出了三个阶段:
第一阶段 (2016/09 - 2018/07) 就是单纯的写代码
在这个阶段,我进行了不少项目的各种模块的代码编写工作,也接手了其他人的一些模块进行整理和重构,也写了部分公用类库,不过在之后回头去看那时候的代码时,确实是能感受到代码的质量不高,虽然需要的功能都写出来了,但可维护性和可读性以及简洁度都不高,有不少冗余的逻辑和代码,也需要在之后投入较多时间来处理各种bug.
第二阶段 (2018/07 - 2019/10) 开始重构和优化旧的代码,编写更多新的代码,开始接触framework
在这段时间中,我还是继续进行了更多的代码编写工作,开发新的功能和新的类库,对旧的模块和类库进行重构来达到新项目的通用化,希望用更简洁的代码来实现各种需要的功能,也开始接触源码编译和源码修改;
第三阶段 (2019/10 - 202102)
经过前面的积累,在这个时间点之后,对编码和架构已经有了一定心得体会,编写的类库更加简洁易用,尽量以无感知的方式应用到每一个模块,减少大量的团队重复工作并不干扰到其他功能,将一些模块以可直接复用的方式构建为稳定和简洁的类库,让不同项目都可以直接使用;
对framework也有了一定认识,能对framework中的systemui,bluetooth,Settings等模块有足够的认识,进行定制修改,可以针对system_service中的出现的问题进行排查和修改;
通过将一部分功能封装为内聚程度较高的类库,并配合一定的说明文档,做到了其他人也能快速入门对应功能的开发并不再需要踩各种踩过的坑,也算是将以往几年的技术积累实际落地到了公司里,也算是对这些年公司给予的各种尝试机会和技术培养的回馈吧;
鸿泉时间线展示 201609-202102
回想这四年,虽然有些经历还仿佛就发生在昨天,但由于时间较长确实很多细节都已经忘了,不过在中间因为有一次晋升技术主管的述职,当时为了整理出以往的经历,从代码的提交log中整理出了一份较为完整的时间线,在这里进行展示:
这里的时间线主要是对比较明确的内容的开始时间进行了概述,其中有一些类库和模块和项目一直都在维护所以没有明确的结束时间.
- 20160921 进入杭州鸿泉;
- 201610
- 完成进入公司的第一份主要任务:金龙6105(7寸Android 4.4屏,主芯片为RK的px2)项目的Launcher,公用库PublicTitle(完成每个应用的公共标题栏部分),整体皮肤方案的SkinPackageManager
- 20161101
- 6105产生分支需求,当时把Launcher和PublicTitle分支了一份
- 经过几次bug和细节需求修改后,确定分支方式会造成多分支都需要进行修改,进行了分支和主干需求的兼容
- 201612
- 陕汽6106项目开始,负责Launcher,行驶记录打印,燃耗分析,装载状态,故障项目的编码实现
- 接手6105的行车报告和车辆身份信息项目,进行少量修改;
- 对Android原生的图库应用Gallery3D进行修改
- 201701
- 6105蓝牙应用,基于JNI和IBinder与底层应用程序交互实现
- 接手悬浮球应用,对代码进行重构(对Android悬浮窗口的理解有了一定认识)
- 蓝牙主界面自定义控件重新设计和编写
- 20170220
- 屏保应用
- 优化代码工程目录
- 6106项目的短信,6105项目的胎压,短信. 6106项目的胎压
- 201703 探索和研究完成PDF阅读器应用
- 201704
- 6105接手不规范驾驶,故障,记录导出,进行重构.
- 完成皮肤包切换的初步设计(之前确定了方案未完善)
- 201706
- 协同开发6106录像回放
- GoogleIO 2017,google宣布Kotlin作为安卓开发的一级编程语言,开始接触Kotlin
- 201707
- 6105新UI,Launcher金龙要求仿某厂商效果进行实现,其他应用更换UI,首次引入Kotlin
- 201709 渣土车核准证应用开发
- 201710
- 华菱7寸和北奔7寸主界面
- 北奔7寸不规范驾驶,行驶记录,故障,服务站查询,短信,进行了大量字节数组式协议的解析,获得不少相关经验
- 201711
- 6106A开始,基于RK的PX3芯片,Android 7.1.1系统,进行系统兼容
- 201802 陕汽危品车应用
- 201803 佛山渣土车证书
- 201804 金龙10寸屏710PA的Launcher等功能兼容模块,陕汽10寸竞标项目.
- 201807
- 合并悬浮球多版本的代码,完成悬浮球模块的兼容.
- 公司初次推行自动编译,最开始是做的源码环境makefile来编译apk,但较麻烦,并且当时的系统还不支持kotlin,研究并验证了gradle自动编译,对gradle的认识提高
- 渣土车公告信息和报警信息,重构,后交由他人负责.
- 初次接触北京开易的ADAS和DMS的SDK,参照demo进行功能实现和功能验证
- 201808 完成对PublicTitle和HQAPI的大幅重构,兼容目前公司的所有Android项目,包含完整的注释和doc.
- 201809 使用重构后的库重构Launcher和蓝牙,适配北奔10寸屏710ws.
- 201810 在兼容版Launcher上完成北奔10寸屏710ws的launcher,在原生launcher基础上进行了高度定制.
- 201811
- 重构蓝牙以便完成710ws的兼容版蓝牙,兼容版PDF阅读器,自行编写的图库应用,编写垃圾清理应用
- 6105麦克风悬浮球,需求需要2个悬浮球重叠自动弹开和放开后自动移动到屏幕边框,进行具体实现.
- 201812
- 广州渣土车需求时期重构渣土车核准证
- 对所有项目皮肤包进行整理,归档到一处,合并重复内容并兼容,编写一些自动脚本.
- 佛山渣土车证书重构
- 进行一个bsd初步研究时期的demo编写,根据demo进行实现和整理.添加一些探究性的需求和标定的需求.
- 201902 合并了所有基于原生launcher修改的Launcher代码,除金龙以外其他都通用同一个apk
- 201903
- 重构金龙7寸和10寸的launcher代码,对相同部分进行抽取.
- 合并重构屏保和PDF阅读器为所有项目兼容版
- 201904
- 验证性质的aibox上的bsd和adas的内容.包括对demo的代码重构和性能优化和通过手机进行预览和标定.
- 陕汽商用车需求期间重构对应项目的故障代码.
- 陕汽胎压,短信等应用代码重构.
- 渣土车证书将单核准证版和佛山双证书版进行合并和大规模重构,可使用配置文件进行多项细致的配置.
- 201906 重写和重构了一份视频监控的代码.
- 201907 龙猫手机app应用.
- 201908 北奔10寸中央充放气应用
- 201909
- 合并所有版本的蓝牙代码,目前所有车型都可通用一个apk
- 陕汽新能源需求期间重构陕汽车辆医生代码,优化故障代码,兼容新能源需求.
- 201910 参考多方面的资料编写了Android APP开发规范.
- 201911
- 需要rtsp的播放器,进行了一些开源项目的尝试,并对ijkplayer进行了编译和浅层的调试优化,但底层存在问题,后续跟进无人能参与底层修改.
- 提出对app的svn代码目录进行整理和迁移,迁移了自己负责的所有代码.结构为多次考虑后得出,并在之后讨论针对git时只需进行少量优化
- 201912
- 对openstreetmap进行探究和资料整理,进行演讲说明
- 201912
- 开始进行Massimo项目的内容,主要为应用的框架和交互构建
- 原生蓝牙修改为从机模式,原生蓝牙蓝牙音乐功能,
- 8953芯片特有的摄像头服务组件API实现视频监控功能.
- android源码编译,通过导入源码环境生成的依赖包在非源码环境调用系统隐藏api,对系统的少量修改.
- 202003 701陕汽十寸屏,Launcher应用,基于Android系统的原生蓝牙的蓝牙电话,通讯录,通信记录的基础封装和实现,对系统的一些修改.
- 202007 601车厘子项目Launcher,通过Socket局域网交互实现TBOX上普通电话的显示和操作.
- 202008
- Massimo主界面车辆仪表盘的实现,对自定义控件的绘制有了更多理解.
- 三一重卡Android屏项目
- 202009
- 讨论规划Git上层应用目录结构
- 进行所有项目上层应用的svn迁移到git操作,研究确定了如何保留svn有移动情况时移动之前的日志的方式
- 所有项目的gradle自动编译相关的实现和整理
- Framework层SystemUI的定制修改
- 202010
- 第三方厂家蓝牙模块匹配系统API相关调试工作
- 202011
- 金龙新10寸屏项目,主芯片msm8953,Android 9.0系统
- 研究完成androidx和support和不使用这些库时的兼容方案
- 私有maven仓库相关的配置
- 公用库自动编译并上传私有maven仓库的实现
- 系统蓝牙从机模式应用的类库封装
- can数据解析类库标准化的模板编写和接口优化
- 202012
- 第三方媒体应用信息显示和控制
- 202101
- 8953芯片camera API的封装
- 音乐电影基于LibVLC的封装的一些探索工作
- 20210202 离开杭州鸿泉
鸿泉的总结
其实在离开鸿泉之后,才发现鸿泉的特别之处,在其他公司,很少能看到公司的总监级左右的领导亲自下场做技术工作和编码工作,大多数领导都负责进行管理方面的工作,以管理项目为主,指导和把控技术的都不多;
但在鸿泉,有几个职级很高技术都很强的总工,一直与基层部门一起参与开发工作,指导和把控基层人员的编码,有时会亲自下场进行某部分的编码工作,并经常进行基层部门的代码review工作,这也造就了鸿泉里比较注重技术的氛围,或许这也是这家公司能做到上市的原因之一;
在这家公司工作的这段时间确实是一段非常宝贵的经历,或许在其他地方我不会有如此多的成长;非常感激让我进入这家公司的面试官也是进入之后的大领导,也非常感谢部门的领导和同事;
2021/03 - 202201 上海势航
这家公司的规模和鸿泉相比没有那么大,也是主要做商用车方向的,和在鸿泉工作时的内容基本完全一致,只是细节和供应的车厂不一样,进入这家公司并从杭州来到上海,更多的原因是之前在鸿泉的一个同事朋友也在我离职后不久从鸿泉离职,能一起到这家工作,所以当时也没有考虑更多;
在来之前,虽然也有几个量产的项目,但是之前缺少相关的技术带头人,软件的稳定性和代码质量都是肉眼可见的低的;进入之后,经过一小段时间对部分模块的重写后的展示和与领导的沟通,也让领导确认到了我的技术情况,放开手脚让我进行发挥;
而在这之后,便是在新的项目中将以往在鸿泉时期积累出的各种,在这里进行了一次重新归纳和落地,以前有些方面做的不够完善的改进后进行落地,以前有些落地后才发现不太好的地方也能有机会再思考后再进行一次更好的实现;
上层应用开发的整体框架以及各种通用性类库,代码仓库结构和自动编译和集成,framework的一些细节修改;由于有之前公司一起来的同事配合和现在公司的同事配合以及领导的支持,相关的工作还是很顺利了;
工作的一年里,不仅完成了多个新的量产项目,也将以往的旧项目重构后提升了质量摆脱了一直需要额外进行投入;
但由于都是对以往经验的重新落地,在顺利之余,也总是觉得缺少了一些东西,之前离开鸿泉,也是因为想到一个新的公司,看看他们的技术体系与以往在鸿泉时经过多年摸索后的自我领悟的体系有何区别,见识和学习一些新的东西,
所以即时公司已经正式任命了我到APP软件经理,离别时领导也对我不舍,但在最后我还是选择去一个新的可能能够更快提升的地方;
势航时间线展示 202103-202201
这里也整理了一份在势航时的工作时间线:
- 20210310 进入势航.
- 202103
- 进行蓝牙模块重新开发的功能封装,针对低版本的android系统不同模块的蓝牙从机实现方式,进行分层封装和标准接口,实现不同蓝牙模块共用一个中层库,通过依赖不同底层库的形式一套应用界面代码适应多种模块,使用类库对部分旧项目的蓝牙应用进行了重新开发和验证.
- 提出使用gitlab管理代码,构建了上层应用的gitlab结构
- 开始构建上层应用的基本类库,曾经是将大部分内容放到了一个类库,不利于不同情况的区分依赖,现在将不同的内容分成多个类库,包括:系统相关工具类SystemUtils,其他常用工具类ComUtils,公共UI类库PublicUI,公共自定义空间ComView等
- 202104
- 开始进行第一个新项目重汽SVD101B的开发,对任务分解和分配,使用自己设计的新的上层开发方式和类库进行开发.最开始主要只负责各类库的完善和Launcher以及蓝牙应用
- 提供使用多媒体按键作为通用的媒体控制接口时的实现模板.
- 对调试应用”工程模式”进行重新开发,确保符合模块化需求.
- 构建公共gradle编译模板,将上层app的git仓库构建为repo,先只完成了上层应用的自动编译和自动生成相关配置文件.
- 202105
- 对串口通信的类库进行了重新开发和封装,确保串口读写的基础类库的稳定性.
- 对与Mcu进行交互的程序的代码进行了重新开发,将所有与Mcu相关的单独作为一个McuManager模块,提供多种形式的交互接口,并将与系统交互的内容分离为单独的模块SystemController.
- 对设置相关的一些内容进行重新封装为工具类,确保正确性和稳定性,对设置的一些内容进行重构.
- 202106
- 开始新项目SVD123的开发,使用SystemUI状态栏作为标题栏,对SystemUI进行修改,对公共UI部分进行开发,指导他人使用蓝牙类库对蓝牙进行开发.
- 构建新项目快速构建结构的模板.
- 202207
- 开始正式负责部分上层应用开发的任务分解和任务划分工作.
- 202208
- 对外挂多方位设备通过串口进行交互实现的多方位录像实时预览和录像恢复的功能进行了重新开发和类库封装,对系统camera显示进行详细调试确认问题和系统一起进行完善.
- 对视频监控相关的内容进行封装,对倒车左右转优先显示的内容进行模块化处理,由于此系统的camera图像无法显示到悬浮窗,只能显示到activity,需要进行较多的额外处理.
- 开始对旧项目SVD08B进行重构
- 开始对旧项目SVD1025B进行重构
- 202209
- 开始对五征相关的一系列旧项目进行重构,多个项目需求类似,大部分共用同一套代码.
- 故障信息功能确认问题后进行重新开发.
- 使用外接360环视设备实现的360环视功能的重构和封装.
- 构建android Api29时的上层App自动编译和生成mk等相关的内容.
- 确认了Api29时系统种只存在Androidx相关类库,对部分类库进行Androidx改造.
- 202210
- Api29时的SystemUI的简单修改
- Android Api29时一些上层源码的修改.
- Api29时,使用原生从机蓝牙Api的类库的实现(最终由于模块厂商原因未使用此方式)
- 在以前的蓝牙类库封装的方式上,增加一个底层库,实现了在Api29上兼容新蓝牙模块,开发了部分内容,并指导他人进行了完成.
- Android Api29 原生launcher的一些预研
- 供外部使用的API库的实现.
- 202211
- 构建私服maven仓库,编写gradle上传类库到maven的内容,将大部分应用修改为使用maven仓库的形式.
- 使用jenkins构建了完整的系统和app编译,发现变更在深夜自动编译等内容.
- 将各通用模块和SVD123的专属应用调试适配Api29
- 202212
- 被正式任命为部分APP软件经理.
- McuManager,SystemController,蓝牙,SystemUI/公共UI等模块的详细需求和逻辑文档编写.
势航总结
在势航工作的这段时间,主要的工作便是将以往在鸿泉四年多积累的经验进行了一次整理复盘,虽然没有收获更多新的成长,但是能够将以往的内容完整的进行一次整理和吸收,也大大的加深和巩固了我对上层开发的理解.
例如之前在鸿泉做项目的兼容时,有时候会使用项目来判断某些功能是否适用此项目,而这样会造成新项目要对代码进行修改才能适应,到势航后,考虑到这种情况,将是否使用某个功能进行非常小的划分,
并使用独立的属性或其他配置来决定是否使用,这样新项目时只需要在配置文件中进行修改即可, 而之后到了乘用车公司,发现他们的配置字正是这种思路的实践;
2022/02 - 202206 合众新能源(哪吒汽车)
进入合众之前,我是对其有较大的期望的,作为一家较大的公司,进入前我认为他们应该是有着一套完整的技术体系的,可以去学习和见识到一些新的内容,
可惜实际进入一段之后,发现他们的Android软件团队,并没有什么技术体系,上层应用的开发各自为战,framework提供的接口也较一般,应用的代码可以说基本没有把控;
大公司的framework和应用是分的较开的,做应用的话只是单纯的ui和ui应用相关的逻辑,也没有进一步深入framework的机会,目前这些应用的内容以往都做过很多次和优化过多次了,继续做下去也没有什么成长,所以在干了一段时间后产生了较大的落差感,也萌生了再寻他路的想法;
最后在某个时间点下定决心,但由于当时上海新冠疫情爆发,上海进入封闭管理,在家办公了3个月,封闭结束后,与公司的领导聊了自己对目前技术团队的看法以及曾经在其他公司构建体系的经历和看法,领导也比较认可相关的看法,希望我能留在合众将这些再次落地一次,但最终我还是选择了离开;
这就是一次满怀憧憬进入一个大公司,最终离开的经历;
2023/07 - 至今 上海蓝马
与之前的tire1和车厂相比,这家公司前面只是tire1公司的软件供应商,帮tire1公司做一部分的软件,甚至后面转为了人力外包公司;
当初加入这家公司是因为面试时的领导承诺了有较多的做不同层级比如framework的机会,再加上一些机缘巧合最终进入了这家公司;
总的来说,进入这家公司后,确实接触到和了解到了更多乘用车车载开发相关的内容,也参与到了不同层级的开发工作中,其中也包括在专门的framework团队中参与了工作,也是颇有收获的一家公司,
但由于目前公司转为了人力外包公司,工作的各种不稳定性也逐渐提升,所以目前打算寻找一个新的发展机会;
蓝马时间线展示 2023/07 - 至今
2022/07 - 2023/04 负责长城GWM3.5项目的中间件AdapterService的继续开发和维护;
在参与这个中间件模块的过程中,也需要接触CarService和一些VehicleHal相关的内容,对乘用车开发中,基于VehicleHal和CarService的can信号处理体系有了更多认识;
并对基于高通8155芯片的博世核心板模式的乘用车车机的整体体系有了一定了解,android居然是运行在qnx上的虚拟机,内部的通讯大多都基于以太网等等;2023/04 - 2023/10 奇瑞T1J项目,负责蓝牙电话、OMS车内影响、E/BCall、电子手册的开发和维护;
这个项目将曾经整理的车载蓝牙的类库又在乘用车项目中进行了一些实现,乘用车的相关需求上也有更多细节,所以收获了一些功能开发的更多体会;2023/10 - 2024/02 吉利G3项目,虽然是商用车,但是使用乘用车体系开发,参与到framework团队的工作;
在这个项目中,接触到了更多framework相关的内容,并对hal层进行了一些开发工作,对hidl和c++也有了一定认识,由于是使用的国产芯片,不像之前8155一样VehicleHal和配置字等底层程序都是使用博世的,这个项目中都是自行进行了实现,通过与中间层RTOS的和间通信来完成与mcu的通信;
这个项目还是收获了很多的,一方面是framework的开发,另一方面也让我认识了framework和底层相关的技术我还有很大的学习进步空间,也非常感谢这个项目中的领导,给我提供了很多帮助;2024/02 - 至今 奇瑞T1L项目,基于之前的T1J项目,进行较多的UI逻辑的修改,主要是上层应用的ui开发和ui逻辑处理;
蓝马总结
在蓝马的这接近2年的时间中,参与到了乘用车开发中不同层级的工作,对整个乘用车车载开发体系有了更多的认识,还是收获较多的,特别是在framework的阶段,让我认识到还有更多的内容等待着我去学习;
总结
7年半的时间中,在鸿泉的4年多时间,从初入行业的懵懵懂懂,到之后对这份工作已经有了自己的一定理解和感悟,之后为了更高的目标而离开鸿泉后,一路寻寻觅觅,期望能获得更多的成长,因为各种原因又辗转了多处;
应该是由于还未能见到更高的风景,离开鸿泉后,对于应用层的开发,我并未见识到让我较为认可体系和代码,大多数团队依然还是处于开发人员各自为战和较为松散的技术体系中,并没有足够的把控和体系建设,期望在未来能见识和学习到更优秀的应用层知识;
对于framework和Android底层的相关内容,以及对整个车载开发的体系上的认识,这一路走来都是收获颇丰的,也是我期望在未来能继续深入参与和学习的内容;
最后,非常感谢这些年一起走过的同事和领导,没有你们的帮助和支持我无法取得如此多的进步.