这是一份帮助 Android 开发者知识积累与能力进阶的学习路线,主要集中在 Java、Android、计算机基础、Flutter、NDK、产品和软实力等话题。
小彭的整个 Android 知识体系是参考了杜威十进制的知识分类**进行分级整理,未来小彭也会按照这个体系去输出内容。有很多细节的地方,考虑到不是很完善的地方,大家可以提 Issue 给意见(别忘记 Star 哟)。
1、⭐ 先给一个 Star: 你的支持对我非常重要,我的内容质量绝对对得起你的 Star,给我一点创作的动力,感谢。
2、进小彭的 Android 交流群: 加我微信进群,我们对群质量有要求,你可以在这里找到志同道合的朋友。群里可以讨论技术、分享文章、聊天、吐槽,允许适当发招聘广告,不受欢迎的行为是严格禁止的:
3、关注我的 公众号: 坚持高质量原创内容,不人云亦云,公众号后续是我主要的内容更新平台;
4、关注我的 掘金、知乎 和 《AndroidFamily》 专栏: 掘金上有我历史发布过的所有文章;
5、关注 AndroidFamilyDemo 项目: 该项目作为 《AndroidFamily》 专栏配套 “示例程序” 而存在,旨在帮助读者更直观感性地理解纸面上的知识点,进一步提高学习效率;
6、催文: 我会优先输出大多数读者朋友感兴趣的内容,你可以在 Issue 里提出你的需求,小彭会按照大家普遍的需求调整方向。当然同时能请小彭喝一杯速溶咖啡的话,你就是很 Nice 的 boy!
很快的,再过几个月就已经是工作四年的老同学了。这几年和不少同学共事过,发现不少人(包括我在内)平时看起来工作努力,也有足够的能力“应付”需求,但一旦跳出舒适区,到更高的要求去解决问题, 却不一定能游刃有余。为什么会这样,我想原因是多方面的:
-
1、缺乏深度,不知其所以然: 懂得运用技术去解决问题,但没有思考过选择这些技术背后的逻辑,对技术背后的底层原理也知之甚少。这种状态在遇到有一定深度的任务时,会束手无策或南辕北辙。
-
2、知识碎片化,不成体系: 对每项技术都有所涉猎,但却无法站在更高 / 更深的角度理解使用的技术,也无法完整且有条理地描述出项目中使用到的技术。这种状态很难说有能力胜任复杂业务 / 复杂系统设计。
是什么原因导致出现这种状态,是公司的原因吗?也许。在初创团队,会更多地奉行 “拿来主义”,很多问题直接使用第三方 SDK 解决。只有在大型团队,才有机会真正参与到基础平台的研发。事实确实如此,业务和团队的限制因素的确存在并且影响巨大,但这是决定因素吗?我想,我们需要问自己是否真正地去努力了吗?既然在小厂,那么就更加应该坚持学习,持续探索技术深度,在自己的能力边界疯狂试探,这些行为会在将来晋升或者跳槽时称为自己的筹码和亮点。我会推荐你读读看张绍文(前微信工程师)的《做一名有高度的移动开发工程师》,包括整个专栏,很多内容会激发你的思考。
回到主题,如何成为有高度的移动开发工程师呢?首先需深度和广度:能站在客户端的角色上,深入钻研一个问题在客户端技术上的实现细节,并且持续打磨,同时又能横向全面地思考每个细节 / 边界。然而,移动开发已经不是单兵作战的时代,随着业务复杂性提升,单纯的客户端优化已经不能解决业务述求,这个时候就需要跳出客户端的角色范畴,站在更高的角度思考问题,清楚每个端能够做和不能做的事情,而不局限在客户端这一亩三分地。
很多 Android 开发者有焦虑和浮躁的心态,这似乎已经称为一种普遍的现象,更不用说还待在小厂的同学。的确,移动开发已经不再是 “风口”,很多初级移动开发的岗位在减少,一线大厂对候选人的要求也变得越来越严格,对算法和计算机底层知识也有深入的考察。难吗,你是不是在羡慕那些当年选择了前端或服务端的同学?但是据我观察,往往是服务端羡慕客户端,前端看着服务端眼馋,而客户端又盯着服务端手中的蛋糕。我不知道谁在说心里话,也许,别人碗里的饭就是香一点,更别提 AI、算法、音视频这些香饽饽。
有的人选择了转行,结果是站在风口上被吹到天上,还是在任何方向都没有深度积累,最终没有竞争力。我没有经历过,所以我也看不到最终的结果。我们唯一能看到的结果是:“风口是等来的,而不是追来的”,人家之所以能站在风口上,原因是有多年的积累,最终等来的风口。站在当前时代,我们首先要做的,就是抛弃焦虑,焦虑解决不了任何问题。唯有无所畏惧地往前冲,才能留有一席之地,那些落后于时代的移动开发者必将被淘汰。看过王争(前 Google 工程师)在文章里写过:“每一个优秀的人,都有一段沉默的时光,那段时光是付出了很多努力的,却得不到结果的日子,我们把它叫做扎根。” 你经历过这个阶段吗?
-
010 Java 编程
-
020 Kotlin 编程
-
030 Java 虚拟机
-
031 Java 虚拟机内存管理
-
031.1 内存分布模型
-
031.2 垃圾回收机制
-
031.3 对象创建过程
-
-
032 Java 编译过程
-
032.1 Java 编译过程
-
032.2 Class 文件结构
-
032.3 APT 注解处理器
-
032.4 注解
-
032.5 类加载机制
-
032.6 泛型机制
-
-
033 Java 虚拟机执行系统
-
033.1 方法调用与方法返回
-
033.2 重载与重写
-
033.3 反射机制
-
033.4 异常机制
-
-
034 并发编程
-
035 Java 集合
-
-
110 Android 四大组件
-
111 Activity
-
112 Service
-
113 BroadcastReceiver
-
114 ContentProvider
-
115 Intent
-
115.1 Intent 基础
-
-
116 Context
-
-
120 Android 核心原理
-
121 Android IPC 通信
-
122 Android 虚拟机
-
123 Android 系统层服务
-
123.1 Android 系统架构
-
123.2 Android 系统启动过程
-
123.3 应用安装过程
-
123.4 四大组件启动过程
-
-
124 Android 应用层机制
-
124.1 Handler 机制
-
124.2 事件分发机制
-
124.3 Window 机制
-
124.4 视图框架
-
124.5 布局解析
-
124.6 绘制机制
-
124.7 ANR 机制
-
-
125 Android 编译过程
-
125.1 APK 编译过程
-
125.2 APK 文件格式
-
125.3 DEX 文件格式
-
125.4 so 文件格式
-
-
126 Android 资源管理机制
-
126.1 资源基础
-
126.2 资源编译过程
-
126.3 资源匹配过程
-
126.4 资源案例:换肤
-
126.5 资源案例:插件化
-
126.6 资源案例:组件化资源冲突
-
-
-
130 Android 核心特性
-
131 Android 版本适配
-
132 权限机制
-
132.1 权限基础
-
132.2 动态权限
-
132.3 特殊权限 - 设备管理器
-
132.4 特殊权限 - 无障碍服务
-
132.5 特殊权限 - 通知使用权限
-
-
133 系统通知
-
134 持久化存储
-
134.1 键值对存储 - SharedPreference
-
134.2 键值对存储 - MMKV
-
134.3 键值对存储 - DataStore
-
-
135 网络请求
-
136 桌面微件 Widget
-
-
140 Android 组件原理
-
141 Jetpack 组件
-
141.08 RecyclerView:可复用型列表视图
-
141.09 Navigation:单 Activity 多 Fragment 的导航方案
-
141.11 Hilt:从 Dagger2 到 Hilt 玩转依赖注入(二)
-
141.14 DataStore:新一代键值对存储方案
-
141.15 Room:ORM 数据库访问框架
-
141.16 WindowManager:加强对多窗口模式的支持
-
141.17 WorkManager:加强对后台任务的支持
-
141.18 Compose:新一代视图开发方案
-
142 网络组件
-
142.1 OkHttp
-
142.2 Retrofit
-
142.3 Glide
-
-
143 序列化组件
-
143.2 Protobuf
-
144 持久化组件
-
145 调优组件
-
146 其他
-
-
150 Android UI 开发
-
151 Android UI 基础
-
151.1 Material Design
-
151.3 自定义 View 基础
-
-
152 文本
-
152.01 TextView 文本控件
-
152.02 Html 富文本
-
152.03 Span 富文本
-
152.04 IconFont 图标文字
-
-
153 图片
-
153.01 图片控件
-
153.02 ImageView 使用详解
-
153.03 Bitmap 使用详解
-
153.04 Drawable 使用详解
-
153.05 资源图片加载过程
-
153.07 图片解码过程
-
153.08 Bitmap 复用机制
-
153.09 Bitmap 硬件位图
-
153.10 计算图片内存占用
-
153.11 常见图片类型解析
-
153.12 图片优化概述
-
153.13 图片优化案例 - NativeBitmap
-
153.14 图片优化案例 - 大图加载
-
153.15 图片优化案例 - 大图监测
-
153.16 图片优化案例 - 图片慢响应排查
-
-
154 动画
-
154.1 动画基础
-
154.2 Lottie 动画
-
-
155 交互
-
156 高级组件
-
156.1 SurfaceView
-
156.2 NestedScrollView
-
156.3 RecyclerView
-
-
其他
- 端内数据状态同步方案VM-Mapping
-
-
160 Android 性能优化
-
170 Android 工程化
-
171 Gradle 构建工具
-
172 AGP 插件
-
172.1 AGP 构建过程
-
172.2 AGP 常用配置项
-
172.6 AGP 案例:多渠道打包
-
-
173 组件化开发
-
173.2 组件化基础
-
173.3 ARouter 原理分析
-
173.4 组件化案例 - 通用方案
-
173.6 组件化案例 - Key-Value
-
174 AOP 面向切面
-
174.01 AOP 基础
-
174.02 Java 注解
-
174.03 Java APT 注解处理器
-
174.06 AspectJ
-
174.07 Javassist
-
174.08 ASM
-
174.09 JavaPoet
-
174.10 KotlinPoet
-
-
175 应用测试
-
175.1 单元测试基础
-
175.2 Android 调试基础
-
-
176 动态化
-
177 安全与逆向
-
-
180 Compose
-
210 计算机组成原理
-
211 计算机组成结构
-
211.3 学习计算机组成原理,到底在学什么?
-
212 数制和编码
-
213 处理器系统
-
213.2 CPU 如何执行任务
-
213.3 从源码到程序执行
-
213.4 GPU 图形处理器
-
214 存储器系统
-
215 IO 系统
-
-
220 计算机网络
-
221 计算机网络基础
-
221.1 计算机网络基础概念
-
-
222 底层网络协议
-
222.01 TCP
-
222.02 UDP
-
-
223 应用层网络协议
-
223.02 HTTP 协议
-
223.04 HTTPS 协议
-
224 网络技术
-
224.1 CDN
-
224.2 Nginx 代理服务
-
-
225 网络调试工具
-
225.1 网络调试命令
-
225.3 Postman
-
225.4 WireShark
-
-
-
230 操作系统
-
231 操作系统基础
-
232 操作系统启动过程
-
233 进程管理
-
234 内存管理
-
235 文件管理
-
236 IO 管理
-
237 进程间通信
-
-
240 数据结构与算法
-
241 基础数据结构
-
241.1 线性表
-
241.3 队列
-
241.4 栈
-
-
242 高级数据结构
-
[242.02 差分数组]
-
242.04 树状数组(区间查询)
-
242.05 字典树
-
242.10 图
-
242.11 布隆过滤器(大数据判存)
-
243 算法设计基础
-
243.01 复杂度分析
-
243.03 分治算法
-
243.04 DFS、BFS
-
243.06 贪心算法
-
243.07 动态规划
-
-
244 算法应用
-
244.02 排序算法
-
245 编程技巧
-
246 经典题目
-
247 思维逻辑题
-
248 竞赛
-
-
250 数据库
-
260 设计模式
-
410 C/C++ 基础
-
420 JNI 基础
-
430 NDK 基础
-
430.1 NDK 编译基础:ndk-build & CMake
-
420.2 so 文件格式
-
420.4 NDK 案例 - so 文件动态化
-
420.5 NDK 案例 - so 文件精简
-
420.6 NDK 案例 - Native 内存泄漏监控
-
-
440 音视频基础理论
-
440.1 视频基础理论
-
440.2 音频基础理论
-
440.3 H.264 视频压缩编码
-
440.4 音频压缩编码
-
440.5 FFMPEG 基础
-
440.6 OPENSL ES 基础
-
-
510 Git 版本控制
-
520 CI/CD 持续集成
-
530 开源
-
地图
-
日志
-
数据
-
IM 即时通信
-
账号体系
-
推送
-
社交分享
-
红包
-
设备
-
信息流
-
搜索
-
应用网关
-
Hybird
-
深度链接
-
隐私
- AndroidFamily 【Android 面经 + Android 学习指南】一份帮助 Android 开发者知识积累与能力进阶的学习路线;🔥
- AndroidPlatforms 每个 Android 开发都要收藏的系统适配手册,带你全面体系化地解读 Android 系统更新;🔥
- ModularEventBus 一个 Android 事件总线框架,为你解决事件总线 “滥用” 问题;
- EasyTrack 基于西瓜视频前端视图树埋点方案实现的埋点方案;
- EasyPrivacy 一个帮助开发者快速解决整改问题的工具;
- LeetCode-Kotlin LeetCode 高频题解 - Kotlin 版本。
如果本仓库对你有帮助,可以请小彭喝杯速溶咖啡。
Copyright [2022] [Peng Xurui]
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.