附录 - 职业方向
事实上,并不是大家在做了一段时间之后,都还想继续做 Android 开发的方向。团队允许你在任何时候申请更换自己的组别、发展方向(比如自己开辟一个新的组别)。若打算继续做 Android 开发,则需要在大三明确自己想探索的细分领域:
- 图像音频视频:
- 图像:既有涉及到硬件部分的,如手机屏幕的色温色差调优;也有针对软件的部分,如相机类软件、后期类软件,各类图片格式、编码方式、解析方式、底层绘制通用接口规范如 OpenGL(ES)、Vulkan 等,以及硬件加速、跨平台等等;
- 音频:语音通话降噪,消除回音,低延时传输,各种音频的编解码加密,OpenSL ES 等
- 视频:各种视频的编码格式,直播推拉流协议,音视频同步,各类视频编码播放库:ffmpeg,ijkplayer,直播这一块对音视频的应用较广,对音视频感兴趣的以后可以加入一些专门做音视频 sdk 的团队或者公司内部的音视频开发引擎组。
- 游戏:这个其实是图像音频视频的另一个分支 + 游戏 Client 完全不同于普通 App 的开发逻辑组合成的。建议先从一个基础的游戏引擎入手,例如 Unity、Cocos2D,有一些基础的概念后,再深入到具体的子系统如物理系统、粒子特效、音视频系统优化和场景过渡等等;
- 系统开发:
- HAL 相关的偏硬件层面的驱动开发、移植、调优,包括 ROM 研发,以各类手机和嵌入式物联网设备为载体;
- Framework,纯粹的 Android 上层系统层面,在国内更多是加入很多厂商自己定制的系统服务,尽量不侵入原生的 Framework;
- 上层 App:诸如浏览器、相机、电话等系统必备 App(除去短信、软件商店等其实是比较没有技术含量的),这块其实涉及的面比较多,既有要考虑硬件特性的部分,也有需要强相关专业知识的部分,可以结合其他的方向一起看;
- 额外的,运用的方向其实不应该局限在手机平板等常见手持设备,还多应该看到物联网方向的 Android Things 等标准;
- 通用基础架构方向:
- 跨平台:iOS,Flutter,React Native,Weex,Web,各家小程序,C++ 等,至少吃透 1-2 个框架的原理,有自己对跨平台的理解,有实现一套简易的渲染协议的本领(比如 iOS 上的一个软件叫 JSBox)
- VM,特别是 Android 上的 Dalvik 和 ART,这方面主要是国内的大厂研究的比较多,比如:
- 如何优化 GC 让支付宝启动提速(https://juejin.im/post/5be1077d518825171140dbfa)
- 如何做 Java Method 的 Runtime AOP 实现 Xposed 无 Root 使用 (https://github.com/tiann/epic)
- 网络,这块除了常见的 Http 实现(OKHttp)、Socket 实现(WebSocket)等基础的部分需要深入掌握,其他常见多数是大厂碰到的问题,比如:
- 设计自己的聊天协议
- 设计自己的 Push 通道
- 存储,包括:
- 数据库,常见的移动关系型端数据库 Sqlite,新奇的 NoSQL 数据库 Realm,以及上层的 ORM 如 Room、GreenDao,还有 Key-Value 型的各类数据存储
- 文件,日志存储、图片存储、聊天记录存储、商品库离线存储等等
- 实际场景大部分出现在一些需要离线的领域:
- 微信的 MMKV(https://github.com/Tencent/MMKV)高性能 KV 数据库;
- 电商的线下自助 POS 机离线商品存储,比如如何直接加载一个局域网的数据库,如何通过服务端下发的 binlog 做同步,如何存储和解析交易的优惠规则等;
- AI,移动端现在的 AI 场景其实是很局限的,但是如果是做 AI 相关领域反过来掌握了一定的 Android 相关知识其实是很不错的,这方面场景比如:
- 视觉,检测是拍人还是拍物需不需要虚化,检测是否某个人要开启自动滤镜,相册的分类,AR 场景的大量识别运用,电商类的;
- 语音,语义分析,运用在输入法、智能助理(远程控制)、备忘录等等;
- 行为与环境分析,运用各类实时传感器数据,分析个人的作息、运动等等,还有通过敲西瓜的反馈声波判断西瓜是否成熟的奇葩运用;
- 安全
- 网络安全:支付,即时通讯等应用的加密认证,通讯协议设计。
- 应用安全:逆向工程,应用加壳混淆等,主要是 360 及各大公司的逆向团队在做,防止自家应用被破解。