Android 开发现状分析与中高级技术进阶路线
前言
现在的终端开发已经开始进入稳定期,在这个阶段大厂压力很大小厂更会收到挤压,人们使用的 App 越来越固定,即使是大厂,几年前平台级应用发个 Push 就能引流几十万,现在这些的作用也越来越小,特别到了今年,想要在 Top 100 的 App 里突然出现一个来自不知名团队的爆款已经基本不可能。在这种情况下对于开发者来说带来的变化我认为主要有两点:
1. 开发者的门槛越来越高
小厂的机会少了,大厂的业务趋于稳定,短期内在移动端不会出现爆发性的增长,那随之而来的就是移动端招人越来越理性,门槛水涨船高。这两年看部门移动端校招,除了技术本身都很扎实以外,清一色 985/211 学霸 + 竞赛成绩 + 各种奖项+NB 实习经历,社招基本集中在国内主要的互联网公司和几大手机公司中。并且现在大部分公司受限于本身的业务规模和在移动端的投入,技术和国内主要互联网公司的差距越来越大,换句话说,小公司生存会越来越困难,之后从小公司向大公司跳槽也会越来越困难。
2. 对开发者的要求越来越高
小厂生存越来越困难,那势必会对开发者提出更高的要求。相比之前,对于终端开发者的技术要求会越来越宽广,最好是个多面手,是个大前端。大厂内部的压力也非常大,数据想要有大幅度的提升也越来越困难,因此更多的方向,更多的需求也就在所难免。现在的终端开发者处理的问题比之前更多更复杂,需要 Cover 的面更广,需要学习的更快更深入,并且在技术之外,还需要有足够的软实力支撑。在这样的要求下,很多时候,能力的差距已经不是用勤奋就能弥补的了,况且大部分人本来就谈不上有多勤奋。
最近看到一个在零基础自学 Android 最后能否找到工作,这个问题下的高票回答,讲述了她从开始选择 Android,经过非常努力的学习和挣扎,然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜,如果早两年入行可能结果会比现在好很多,但可惜,这就是现实。最后回到题主的问题,在这种情况下,Android 开发者还会有之前那么吃香吗?我相信答案已经很明显了,专注的开发者和面对当前的环境,经过理性思考选择放弃的人都能收获更好的生活,但那些半吊子,之后在这个行业里会越来越难受。之前吃肉的以后能上海鲜,以前很多喝汤的可能就什么都没有了。
而之所以成为会有些 Android 行业仍旧有如此多的半吊子,相信和以下几点分不开关系:
大学期间实践得晚:有些学生在大三的时候才接触 android 了,但在毕业一年后才正式从事 android 开发,从头学起,这过程中只看了一些关于 android 方面的书籍,多数时候也只是停留在纸面上,在配置开发环境和开发过程中遇到一些问题导致自己不能坚持下来,想想那时真傻,有啥问题都不知道用谷歌搜搜,只知道按照书上的来,就算用百度搜一下也好啊,实践得晚最大的弊端是之前花时间看 android 方面的资料都算白费了,因为这中间一直是断断续续,看看远没有实践来得印象深刻,没有真正实践的开发过 app,很多东西基本都忘记了,浪费了不该浪费的时间。
基础学科没学好,知识不牢固:android 是多个基础学科结合的复合型产物(高级语言 java、操作系统、编译原理、算法与数据结构、设计模式等等),由于是从 win32 程序出身的,后来做项目直接学 android,java 基础这些只是看了几本书,导致踩了很多没有必要踩的坑,比如在 finalize 方法中关闭资源、没有关闭文件流等等,没有学好基础学科最大的弊端是踩了很多没有必要踩的坑。
没有早点相信方法和设计模式:单元测试、低耦合高内聚、封装变化、设计模式这些前人总结的东西都是非常好思想,现在很后悔自己没有早点相信他们,就算当时不能够理解也应该坚决执行的,因为当后面有一定工作经验后回头来看,科学的方法和设计模式真的对编程很有好处,至少会让你少很多 bug,写的程序稳定性更高。
我能给的建议是:
- 纸上得来终觉浅,绝知此事要躬行
- 打好基础
- 即使不能理解,也应该对科学的方法和思想深信不疑并贯彻执行
这一套系统的学习方式相信能帮你们解决绝大部分问题:
Android 中高级进阶技术路线
完整的一个技术路线主要包含以下几个模块:架构师筑基必备技能、Android 高级 UI 与 FrameWork 源码、360°全方面性能调优、解读开源框架设计思想、NDK 模块开发、架构师炼成实战、微信小程序、Flutter 技术进阶。
架构师筑基必备技能
Android 应用是由 Java 语言进行开发的,SDK 也是由 Java 语言编写,所以我们要学习 java 语言。另外,虽说 kotlin 语言得到了 Android 官方的热推,但是 kotlin 也是编译成了 java 语言再运行的。对于 Android 来说,只要 SDK 没有用 kotlin 重写,那么 Java 语言是都需要学习的。而且 Androidapk 的后台服务器程序大概率是 java 语言构建,所以学习 java 也是一种必然。
深入 Java 泛型
泛型的作用是提供类型安全,避免运行时错误。通配符与嵌套允许更灵活的类型约束,泛型上下边界则限制了类型参数的范围。在 RxJava 中泛型的使用分析尤为重要,它决定了响应式流的类型推断准确性。
注解深入浅出
自定义注解可以简化代码结构,提高可读性。注解的使用涉及元注解和运行时保留策略,理解其原理有助于开发 AOP 切面和框架集成。
并发编程
线程共享和协作是并发核心,站在巨人肩上操作 CAS 可以减少锁竞争。仅会用线程池是不够的,需理解线程池参数配置。Android AsyncTask 原理解析揭示了异步任务的生命周期管理,尽管已废弃,但其思想仍有价值。
数据传输与序列化
Serializable 原理基于反射,效率较低;Parcelable 接口专为 Android 优化,速度快。Json 解析则是网络通信的基础,Gson 或 Moshi 等库的应用需熟练掌握。
Java 虚拟机原理
垃圾回收器机制决定了内存管理的效率,内存分配策略影响对象创建速度。Dalvik 虚拟机及其演进至 ART 的过程,是理解 Android 运行环境的关键。
反射与类加载
反射基本概念与 Class 对象操作提供了动态能力。ClassLoader 类加载器负责类的加载过程,双亲委派模型保证了安全性与一致性。
动态代理
动态代理基本原理是 AOP 的核心,通过代理对象拦截方法调用,常用于日志记录、事务管理等场景。
高效 IO
Java IO 体系包括字节流和字符流,File 文件操作涉及底层系统调用,理解 NIO 非阻塞 IO 可提升高并发下的 I/O 性能。
Android 高级 UI 与 FrameWork 源码
这块知识是现今使用者最多的,我们称之为 Android2013~2016 年的技术,但是,即使是这样的技术,Android 开发者也往往因为网上 Copy 代码习惯了而导致对这块经常'使用'的代码 熟悉而又陌生:熟悉的是几乎天天在和它们打交道,天天在复制这些代码;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码原理,代码深处的内涵。所以我们需要从新的角度去分析这些知识点,深入研究他们,要学习源码,模仿源码,然后再 hook 源码,这样才能说自己懂这块的知识。这些都是做 Android 开发,做高级工程师的基础。
高级 UI 晋升
触摸事件分发机制涉及 Activity、Window、View 三层传递,理解 dispatchTouchEvent 流程至关重要。View 渲染机制包括 Measure、Layout、Draw 三个阶段。常用 View 如 TextView、Button 的源码实现需掌握。布局 ViewGroup 如 LinearLayout、RelativeLayout 的测量逻辑是自定义布局的基础。自定义 view 实战则是综合能力的体现。
Android 组件内核
Activity 与调用栈管理生命周期,Fragment 的管理与内核涉及 FragmentTransaction 的事务提交。Service 内核原理区分前台与后台服务。内核之组件间通信方案包括 Binder、AIDL、Messenger 等,需根据场景选择。
数据持久化
Android 文件系统权限严格,轻量级 kv 持久化使用 SharedPreferences。嵌入式 Sqlite 数据库支持复杂查询,Room 库进一步封装了 SQLite 操作。
Framework 内核解析
XMS 内核管理涉及系统服务注册。Handler 消息机制是 Android 多线程通信的核心,Looper 与 MessageQueue 配合工作。布局加载与资源系统涉及 R.java 生成和资源查找路径。
360°全方面性能调优
一个 app 的性能好不好我们需要从两个层面努力。第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。
设计思想与代码质量优化
六大原则指 SOLID 原则,设计模式如单例、工厂、观察者等。数据结构与算法直接影响时间复杂度,合理选择可提升执行效率。
程序性能优化
OOM 问题原理解析涉及内存泄漏检测与 GC 机制。ANR 问题解析关注主线程阻塞原因。Crash 监控方案如 Bugly 或 Firebase。启动速度与执行效率优化包括延迟加载、预加载。布局检测与优化减少嵌套层级。内存优化避免大对象常驻。耗电优化减少 WakeLock 持有。网络传输与数据存储优化使用 HTTP/2 或缓存。APK 大小优化使用 ProGuard 和 R8。屏幕适配处理不同分辨率设备。
开发效率优化
分布式版本控制系统 Git 用于团队协作。自动化构建系统 Gradle 配置依赖和打包流程,提升 CI/CD 效率。
解读开源框架设计思想
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。在项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
热修复设计
AOT/JIT & dexopt 与 dex2oat 涉及代码执行优化。热修复设计之 CLASS_ISPREVERIFIED 问题需绕过验证。热修复原理基于类加载替换。Tinker 的集成与使用涉及自动补丁包生成与差分算法。
插件化框架设计
Class 文件与 Dex 文件的结构解读是理解加载机制的前提。Android 资源加载机制详解涉及 AssetManager。四大组件调用原理包括 Intent 解析。so 文件加载机制涉及 JNI 入口。Android 系统服务实现原理涉及 SystemServer 进程。
组件化框架设计
阿里巴巴开源路由框——ARouter 原理分析涉及注解处理和路由表。APT 编译时期自动生成代码&动态类加载减少反射开销。Java SPI 机制用于服务发现。AOP&IOC 解耦业务逻辑。手写组件化架构锻炼架构能力。
图片加载框架
图片加载框架选型考虑内存占用与加载速度。Glide 原理分析涉及磁盘缓存与内存缓存策略。手写图片加载框架完成是对原理的验证。
网络访问框架设计
网络通信必备基础包括 TCP/IP 协议。OkHttp 源码解读涉及连接池与拦截器链。Retrofit 源码解析涉及动态代理与注解处理。
RXJava 响应式编程框架设计
链式调用提升代码可读性。扩展的观察者模式实现数据流处理。事件变换设计如 map、filter。Scheduler 线程控制切换线程上下文。
IOC 架构设计
依赖注入与控制反转降低耦合。ButterKnife 原理上篇、中篇、下篇涉及注解处理器。Dagger 架构设计核心解密涉及编译时生成代码。
Android 架构组件 Jetpack
LiveData 原理涉及生命周期感知。Navigation 如何解决 tabLayout 问题涉及导航图。ViewModel 如何感知 View 生命周期及内核原理涉及 ViewModelProvider。Room 架构方式方法涉及 ORM 映射。dataBinding 为什么能够支持 MVVM 涉及双向绑定。WorkManager 内核揭秘处理后台任务。Lifecycles 生命周期管理组件状态。
NDK 模块开发
音视频、高清大图片、人工智能、直播、抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是 windows 系统,而现在则是移动系统了,移动系统中又是以 Android 占比绝大部分为前提,所以 Android NDK 技术已经是我们必备技能了。
NDK 基础知识体系
C 与 C++ 是底层开发语言。JNI 开发实现 Java 与 Native 交互。Native 开发工具如 CMake。Linux 编程涉及系统调用与进程管理。
底层图片处理
PNG/JPEG/WEBP 图像处理与压缩涉及解码算法。微信图片压缩优化存储空间。源码都在用的 giflib:GIF 合成原理与实现涉及帧动画处理。
音视频开发
多媒体系统涉及 MediaCodec。FFmpeg 处理转码与滤镜。流媒体协议如 RTMP、HLS。图像预处理涉及 OpenCV。人脸检测、身份证识别、车牌号识别涉及深度学习模型部署。OpenGL 与 EGL 管理图形上下文。Android OpenGL ES OES 扩展纹理处理摄像头数据。OpenGL ES FBO 帧数据缓存用于后期处理。
微信小程序
微信自从问世以来,现在已经是民众必不可少的交流工具。微信小程序,是一种不需要下载安装就可以使用的应用软件,微信小程序的出现实现了应用触手可及的梦想,使用者只需要轻轻的扫一扫或者搜一下就可以打开应用,用户使用起来 特别的方便快捷,今天就同大家一起掌握小程序从无到有的构建过程,能够将 app 开发能力复制到小程序中,并进行项目实战。
小程序介绍
背景与趋势涉及生态发展。小程序技术方案对比原生 App。公众平台注册及配置涉及账号体系。开发工具的使用如微信开发者工具。MINA 框架架构剖析涉及视图层与逻辑层分离。逻辑与界面分离架构提升维护性。单向数据流保证状态一致。
UI 开发
复杂的页面布局涉及 Flexbox。文字图片等内容的呈现涉及 RichText。用户交互表单开发涉及输入验证。对话框等交互元素开发涉及弹窗组件。下拉刷新和上拉加载涉及滚动监听。图形与动画操作涉及 Canvas 与 Lottie。页面之间的跳转过渡涉及路由栈。用户界面事件处理涉及 touch 事件。
API 操作
网络请求涉及 wx.request。文件结构及操作涉及 wx.getFileSystemManager。地理位置获取涉及 wx.getLocation。设备信息获取涉及 wx.getSystemInfo。
小程序购物商城项目实战
微信小程序之侧栏分类涉及 TabBar。仿淘宝分类入口涉及搜索与筛选。购物数量加减涉及购物车逻辑。商品属性分类涉及 SKU 管理。购物车实现涉及本地存储与同步。
Flutter 技术进阶
跨平台开发是当下最受欢迎、应用最广泛的框架之一。能实现跨平台开发的框架 也五花八门,让人眼花缭乱。最流行的跨平台框架有 Xamarin、PhoneGap、Ionic、Titanium、Monaca、Sencha、jQuery Mobile、React native、Flutter 等等。但这些工具的表现也是高低有别,各有千秋。在这些流行的框架中,有很多也已经消失在了历史的长河中被人渐渐遗忘了。但 React native 和 Flutter 这俩框架地位依旧坚挺,备受欢迎。
目录
为什么 Flutter 是跨平台开发的终极之选涉及 Skia 引擎。在 Windows 上搭建 Flutter 开发环境涉及 SDK 安装。编写您的第一个 Flutter App 涉及 Widget 树。Flutter 开发环境搭建和调试涉及 Hot Reload。Dart 语法篇之基础语法涉及变量与函数。Dart 语法篇之集合的使用与源码解析涉及 List 与 Map。Dart 语法篇之集合操作符函数与源码分析涉及高阶函数。Dart 语法篇之函数的使用涉及闭包。Dart 语法篇之面向对象基础涉及 Class。Dart 语法篇之面向对象继承和 Mixins 涉及多态。Dart 语法篇之类型系统与泛型涉及 Generics。Flutter 中的 widget 涉及状态管理与渲染。
结语
详细的内容实在是太多了,毕竟作为一名工程师要学习的技术实在是太多了,只要我们每周比别人多花 6 个小时,就能知道别人不知道的底层技术!上面的技术路线不止做成了一份思维脑图,还每个模块的技术知识都整理成了几百页的 PDF,简直是太方便学习了啊!只要是程序员,不管是 Java 还是 Android,如果不去阅读源码,只看 API 文档,那就只是浮于表象,这对我们的知识体系的建立和完备以及实战技术的提升都是不利的。持续学习与深度钻研是应对行业变化的唯一途径。


