内容涵盖绝大部分 Android 程序员所需要的技能:「设计模式」「Flutter」「ReactNative」「Kotlin」「RxJava」「Dagger2」「Retrofit」「OkHttp」「ButterKnife」「Router」「NDK」「Android架构」「数据结构与算法」「自定义View」「性能优化」「Android源码分析」 「经典书籍」等。
我编写了一份详细的 Android 技术栈思维导图,由于 GitHub 图片国内展示不稳定,所以下面使用的树形结构目录。你可以点击查看详细的 -> 思维导图
如果您有任何问题可以提 Issues ,本项目也欢迎各位开发者朋友来分享自己的一些想法和实践经验,欢迎 Pull Request。
-
- 协议
- 操作系统
- Unix / Linux
- Windows
- 数据结构与算法
-
- Java 基础
- 多线程
- I/O
- 集合框架
- JVM 虚拟机
- class 字节码
- class 字节码执行
- 类加载
- JVM 内存区域
- 垃圾回收
- JVM 内存模型
-
Android 基础
- 四大组件
- Activity
- Service
- ContentProvider
- BroadcastReceiver
- Activity 启动模式
- standard
- singleTop
- singleTask
- singleInstance
- 常用的布局控件
- RecyclerView
- ConstraintLayout
- WebView
- ......
- 数据存储
- SharedPreferences
- File
- SQLite
- Realm
- 线程异步
- Thread
- AsyncTask
- IntentService
- 线程池
- IPC
- IPC 方式
- Bundle
- 文件共享
- AIDL
- Messager
- ContentProvider
- Socket
- 框架
- Hermes
- HermesEventBus
- IPC 方式
- 熟悉常用的开源框架
- 四大组件
-
UI
- UI绘制流程及原理
- 事件的传递机制
- 自定义 View
- 屏幕适配
-
Android 虚拟机
- Dalvik
- ART
-
- 程序架构
- 设计模式
- 架构思想
- 概念
- IoC 控制反转
- DI 依赖注入
- AOP 面向切面
- 开源方案
- ASM
- Javasisit
- AspectJ
- 工具
- APT
- Gradle plugin
- 概念
- 组件化
- 如何处理组件之间的代码边界
- 组件之间的 Router 路由
- 控制反转和依赖注入
- 如何管理拆分的 Module
- 插件化
- 发展历程
- 2014 年
- Dynamic-load-apk
- 2015 年
- OpenAltas
- DroidPlugin
- Small
- 2016 年
- Zeus
- 2017 年
- Atlas
- RePlugin
- VirtualAPK
- 2019 年
- Qigsaw
- Shadow
- 2014 年
- 发展历程
- 热修复
- Native Hook
- Dexposed
- AndFix
- HotFix
- Java Multidex
- QZone
- QFix
- Nuwa
- RocooFix
- Java Hook
- Robust
- Aceso
- Dex Replace
- Tinker
- Amigo
- 混合/优化(商业收费)
- Sophix
- Native Hook
- 字节码技术
- gradle plugin
- 全局的 bug 修复
- 日志统计
-
性能优化
- 安装包大小优化
- 启动优化(冷启动、暖启动、热启动)
- 耗电量优化
- UI性能优化
- XML 布局优化
- 代码优化
- 网络优化
- 线上、线下全链路性能监控
-
- C/C++
- AndroidStudio NDK 开发
- FFmpeg
-
- H5
- Flutter
- Weex
- ReactNative
-
团队
- 如何提高整体的团队水平?
- 如何提高提高团队内代码质量?
- 如何提高团队积极性?
- 数据结构与算法(十四)深入理解红黑树和JDK TreeMap和TreeSet源码分析
- 数据结构与算法(十三)平衡二叉树之AVL树
- 数据结构与算法(十二)并查集(Union Find)及时间复杂度分析
- 数据结构与算法(十一)Trie字典树
- 数据结构与算法(十)线段树(Segment Tree)入门
- 数据结构与算法(九)Set集合和BinarySearchTree的时间复杂度分析
- 数据结构与算法(八)二分搜索树(Binary Search Tree)
- 数据结构与算法(七)树和二叉树
- 数据结构与算法(六)二叉堆、优先队列和Java PriorityQueue
- 数据结构与算法(五)深入理解递归
- 数据结构与算法(四)队列和 Java ArrayDeque 源码剖析
- 数据结构与算法(三)栈和 Java Stack 源码分析
- 数据结构与算法(二)线性表之链式存储和LinkedList实现
- 数据结构与算法(一)线性表之顺序存储和 ArrayList、Vector 源码剖析
- Java I/O 流操作(一)System Properties Runtime 类
- Java I/O 流操作(二)字节流与缓冲流
- Java I/O 流操作(三)File 文件操作、PrintWriter、SequenceInputStream
- Java I/O 流操作(四)对象的序列化
- Java 多线程(一)线程间的互斥和同步通信
- Java 多线程(二)同步线程分组问题
- Java 多线程(三)线程池入门 Callable 和 Future
- Java 多线程(四)ThreadPoolExecutor 线程池各参数的意义
- Java 多线程(五)Lock 和 Condition 实现线程同步通信
- Java 多线程(六)Semaphore 实现信号灯
- Java 多线程(七)CyclicBarrier 同步的工具类
- Java 多线程(八)CountDownLatch 同步工具类
- Java 多线程(九)Exchanger 同步工具类
- Java 多线程(十)ArrayBlockingQueue 阻塞队列
- Java 多线程(十一)JDK 同步集合
- 数据结构与算法(十四)深入理解红黑树和JDK TreeMap和TreeSet源码分析
- 数据结构与算法(十三)平衡二叉树之AVL树
- 数据结构与算法(十二)并查集(Union Find)及时间复杂度分析
- 数据结构与算法(十一)Trie字典树
- 数据结构与算法(十)线段树(Segment Tree)入门
- 数据结构与算法(九)Set集合和BinarySearchTree的时间复杂度分析
- 数据结构与算法(八)二分搜索树(Binary Search Tree)
- 数据结构与算法(七)树和二叉树
- 数据结构与算法(六)二叉堆、优先队列和Java PriorityQueue
- 数据结构与算法(五)深入理解递归
- 数据结构与算法(四)队列和 Java ArrayDeque 源码剖析
- 数据结构与算法(三)栈和 Java Stack 源码分析
- 数据结构与算法(二)线性表之链式存储和LinkedList实现
- 数据结构与算法(一)线性表之顺序存储和 ArrayList、Vector 源码剖析
- ArrayBlockingQueue 阻塞队列
- 深入理解 Java 虚拟机(一)~ class 字节码文件剖析
- 深入理解 Java 虚拟机(二)~ 类的加载过程剖析
- 深入理解 Java 虚拟机(三)~ class 字节码的执行过程剖析
- 深入理解 Java 虚拟机(四)~ 各种容易混淆的常量池
- 深入理解 Java 虚拟机(五)~ 对象的创建过程
- 深入理解 Java 虚拟机(六)~ Garbage Collection 剖析
- 设计模式 ~ 面向对象 6 大设计原则剖析与实战
- 设计模式 ~ 模板方法模式分析与实战
- 设计模式 ~ 观察者模式分析与实战
- 设计模式 ~ 单例模式分析与实战
- 设计模式 ~ 深入理解建造者模式与实战
- 设计模式 ~ 工厂模式剖析与实战
- 设计模式 ~ 适配器模式分析与实战
- 设计模式 ~ 装饰模式探究
- 设计模式 ~ 深入理解代理模式
- 设计模式 ~ 小结
- Android MVP架构改造~如何重用顶层业务
- 二维火Android云收银模块化架构实践
- Android架构—MVP架构在Android中的实践
- Android-MVVM架构-Data Binding的使用
- 使用 repo 管理 Android 组件化项目
- RxJava create操作符的用法和源码分析
- RxJava map操作符用法详解
- RxJava flatMap操作符用法详解
- RxJava concatMap操作符用法详解
- RxJava onErrorResumeNext操作符实现app与服务器间token机制
- RxJava retryWhen操作符实现错误重试机制
- RxJava 使用debounce操作符优化app搜索功能
- RxJava concat操作处理多数据源
- RxJava zip操作符在Android中的实际使用场景
- RxJava switchIfEmpty操作符实现Android检查本地缓存逻辑判断
- RxJava defer操作符实现代码支持链式调用
- combineLatest操作符的高级使用
- RxJava导致Fragment Activity内存泄漏问题
- interval、takeWhile操作符实现获取验证码功能
- RxJava线程的自由切换