Android 开发技术体系全景整理
一、前言
Android 开发可以分为多个层次:
应用界面开发
网络与数据处理
图片、缓存与本地存储
架构设计与工程化
第三方 SDK 集成
音视频与图形图像开发
跨平台与混合开发
系统级开发与 ROM 定制
性能、日志与稳定性治理
存量项目中的旧技术维护
这篇文章可以作为 Android 技术栈的总览,帮助我们把零散知识点放到清晰的体系中。
二、UI 与交互开发
2.1 屏幕适配
屏幕适配是 Android 开发中最基础也最容易出问题的部分,主要包括:
1. 普通屏幕适配
不同分辨率
不同屏幕尺寸
不同像素密度
横竖屏适配
平板适配
2. 异形屏适配
异形屏主要包括:
刘海屏
水滴屏
挖孔屏
圆角屏
曲面屏
重点关注:
状态栏区域
安全区域
全屏沉浸式布局
DisplayCutout 适配
不同厂商 ROM 的兼容问题
3. 折叠屏适配
折叠屏属于近几年 Android 设备形态变化中的重点方向,适配内容包括:
展开态 / 折叠态
大屏布局
多窗口模式
屏幕比例变化
Activity 重建问题
Jetpack WindowManager
2.2 自定义 View
自定义 View 是 Android UI 开发的重要能力,可以分为几类:
1. 继承 View
适合完全自定义绘制,例如:
仪表盘
进度条
图表
波浪动画
核心知识:
onMeasure
onLayout
onDraw
Canvas
Paint
Path
事件分发
2. 继承 ViewGroup
适合自定义布局容器,例如:
流式布局
标签布局
自定义滑动容器
核心知识:
测量子 View
摆放子 View
处理滑动冲突
3. 组合控件
通过组合已有控件实现新控件,例如:
标题栏
搜索栏
空状态页面
带加载状态的按钮
组合控件开发成本低,适合业务项目中大量复用。
2.3 常见 UI 控件与交互组件
可以把下面这些内容归到 UI 组件部分:
1. DrawerLayout
用于实现侧滑菜单,常见于导航抽屉。
2. SlidingMenu
早期常用的侧滑菜单方案,现在很多场景已经被 DrawerLayout 替代。
3. SmartRefreshLayout
常用的下拉刷新、上拉加载框架。
4. StickyLayout / StickLayout
用于实现吸顶效果,例如:
Tab 吸顶
标题栏吸顶
列表分组吸顶
2.4 Android 动画
Android 动画可以单独作为 UI 模块中的一个章节。
1. Tween Animation 补间动画
早期动画方案,只改变显示效果,不改变 View 的真实属性。
包括:
平移
缩放
旋转
透明度
2. Frame Animation 帧动画
通过多张图片连续播放形成动画效果。
适合:
简单动效
加载动画
表情动画
3. Property Animation 属性动画
现代 Android 开发中更常用。
代表类:
ObjectAnimator
ValueAnimator
AnimatorSet
优点:
可以真正改变对象属性
支持组合动画
扩展性更强
2.5 换肤与国际化
1. 换肤
换肤主要关注:
颜色资源切换
Drawable 替换
夜间模式
动态主题
皮肤包加载
2. 国际化
国际化主要包括:
多语言 strings.xml
多地区资源
RTL 布局
时间格式
货币格式
字体兼容
三、网络请求与数据解析
3.1 网络请求
网络请求是 Android 应用开发的核心能力。
1. OkHttp
OkHttp 是底层 HTTP 客户端,主要负责:
发起 HTTP 请求
连接池
拦截器
缓存
超时控制
HTTPS
WebSocket
适合重点讲:
拦截器机制
连接复用
请求缓存
日志拦截
Token 自动刷新
2. Retrofit
Retrofit 是基于 OkHttp 的网络请求封装框架。
主要特点:
接口化 API 定义
注解配置请求
支持 Gson、Moshi 等转换器
支持协程、RxJava 等异步方式
OkHttp 更偏底层请求能力,Retrofit 更偏接口层封装。
3.2 JSON 数据解析
常见 JSON 解析框架包括:
1. Gson
Google 提供的 JSON 解析库,使用简单,历史悠久。
2. Moshi
Square 提供的 JSON 解析库,和 Kotlin 配合较好。
3. Kotlin Serialization
Kotlin 官方序列化方案,适合 Kotlin 项目。
4. Fastjson
阿里开源的 JSON 框架,在 Java 服务端更常见,Android 项目中使用时需要注意包体积和安全问题。
3.3 XML 数据解析
XML 在现代 Android 项目中使用频率下降,但仍然存在于:
老接口
配置文件
第三方 SDK
SOAP 服务
RSS 数据
常见解析方式:
DOM
SAX
PullParser
Android 中 PullParser 较常见。
3.4 Protobuf 数据解析
Protobuf 是一种高效的二进制数据序列化协议。
适合用于:
高性能通信
IM 消息
音视频信令
跨端协议
大型项目数据传输
优点:
体积小
解析快
跨语言
接口结构清晰
缺点:
可读性不如 JSON
调试成本更高
需要维护 proto 文件
四、图片加载、缓存与本地存储
4.1 网络图片加载
Glide
Glide 是 Android 中常见的图片加载框架,主要能力包括:
网络图片加载
图片缓存
GIF 加载
图片压缩
生命周期绑定
占位图
错误图
圆角、裁剪、模糊等变换
可以重点讲:
内存缓存
磁盘缓存
生命周期感知
大图加载优化
4.2 数据缓存
Android 项目中的缓存可以分为:
1. 内存缓存
适合缓存短生命周期数据,例如:
页面数据
图片 Bitmap
临时对象
2. 磁盘缓存
适合缓存长期数据,例如:
接口响应
图片文件
下载文件
离线数据
3. 数据库缓存
适合结构化数据,例如:
用户信息
聊天记录
商品列表
配置数据
4.3 SQLite ORM 框架
Android 本地数据库可以直接使用 SQLite,也可以使用 ORM 框架。
1. GreenDao
早期常用 ORM 框架,性能较好,但现在新项目使用较少。
2. LitePal
使用简单,适合轻量项目。
3. Room
Jetpack 官方数据库框架,现代 Android 项目更推荐使用。
Room 的优势:
官方维护
支持 LiveData / Flow
编译期 SQL 检查
和 Jetpack 生态结合好
4.4 MMKV
MMKV 是腾讯开源的高性能键值存储框架。
适合替代 SharedPreferences,用于保存:
用户配置
登录状态
小型缓存
开关配置
本地标记位
优点:
性能高
使用简单
支持跨进程
适合高频读写场景
五、架构设计与工程化
5.1 Android 组件化
组件化是中大型 Android 项目常用架构方式。
核心目标:
降低模块耦合
提高编译速度
支持多人协作
支持业务模块独立开发
支持模块独立运行
常见模块划分:
app 壳工程
common 基础库
network 网络层
database 数据层
user 用户模块
home 首页模块
order 订单模块
payment 支付模块
5.2 Android 插件化
插件化用于实现 APK 动态加载能力。
常见场景:
动态加载业务模块
减小主包体积
按需下载功能
宿主与插件分离
核心技术点:
ClassLoader
Resources 加载
Activity 启动代理
Dex 加载
插件生命周期管理
插件化实现复杂,现代项目中使用需要谨慎。
5.3 Android 热更新
热更新用于线上动态修复问题。
常见类型:
Java 代码热修复
Native so 修复
资源修复
Dex 修复
核心技术点:
ClassLoader
Dex 插桩
方法替换
资源加载
兼容性处理
热更新涉及平台政策、稳定性和兼容性问题,商业项目中需要谨慎使用。
5.4 Android 路由框架
路由框架主要用于组件化项目中的页面跳转和模块解耦。
常见框架:
1. ARouter
阿里开源的 Android 路由框架,使用广泛。
2. DRouter
轻量级路由框架,支持页面路由和服务路由。
3. TheRouter
现代 Android 项目中也常见的路由框架,强调组件化和动态化场景。
路由框架主要解决:
页面跳转解耦
模块间通信
参数传递
服务发现
降低直接依赖
5.5 响应式框架
RxJava
RxJava 是早期 Android 项目中非常流行的响应式编程框架。
常见用途:
异步任务
网络请求组合
线程切换
事件流处理
防抖、节流
不过在 Kotlin 项目中,很多场景已经逐渐被 Coroutines、Flow 替代。
5.6 依赖注入
Dagger2
Dagger2 是 Google 官方推荐过的依赖注入框架。
主要作用:
管理对象创建
降低类之间耦合
方便测试
管理生命周期
现代 Android 项目中,也可以关注 Hilt,它是基于 Dagger 的官方依赖注入方案。
5.7 事件通信
EventBus
EventBus 是早期 Android 项目中常用的事件通信框架。
优点:
使用简单
解耦发送方和接收方
缺点:
调用链不清晰
难以维护
容易滥用
不利于大型项目排查问题
现在更推荐根据场景使用:
ViewModel
LiveData
Flow
SharedFlow
接口回调
明确的数据流架构
5.8 APK 多渠道包
多渠道包主要用于应用分发统计。
常见场景:
应用宝
华为应用市场
小米应用商店
OPPO 应用商店
vivo 应用商店
Google Play
核心内容:
渠道号写入
渠道统计
自动化打包
Gradle 构建配置
CI/CD 集成
5.9 APK 内置更新
APK 内置更新主要包括:
版本检测
下载 APK
安装 APK
增量更新
强制更新
灰度更新
应用市场跳转
注意事项:
Android 8.0 之后安装未知来源权限变化
Android 10+ 文件访问限制
国内应用市场政策
Google Play 项目一般使用官方更新机制
六、第三方 SDK 集成
6.1 SDK 集成通用流程
第三方 SDK 集成通常包括:
阅读官方文档
添加 Gradle 依赖
配置 AndroidManifest
初始化 SDK
处理权限
处理混淆规则
处理回调
处理隐私合规
测试不同设备和系统版本
6.2 声网 SDK
声网主要用于实时音视频场景。
常见业务:
视频通话
语音通话
直播连麦
在线课堂
语聊房
重点关注:
权限申请
Token 鉴权
音视频采集
频道加入
推拉流
网络状态回调
6.3 地图 SDK
地图 SDK 常见功能:
定位
地图展示
POI 搜索
路径规划
地理围栏
轨迹绘制
常见 SDK:
高德地图
百度地图
腾讯地图
Google Maps
重点关注:
定位权限
后台定位
坐标系转换
隐私合规
电量优化
6.4 支付 SDK
支付模块通常是商业项目中的核心能力。
常见支付方式:
1. Google Play Billing
用于 Google Play 海外应用内购。
2. 微信支付
国内应用常见支付方式。
3. 支付宝支付
国内应用常见支付方式。
支付模块重点关注:
订单创建
支付调起
支付回调
服务端验签
支付状态查询
重复回调处理
防止客户端伪造支付结果
6.5 推送 SDK
极光推送
极光推送常用于国内 Android 消息推送。
推送系统需要关注:
厂商通道
离线推送
通知栏权限
消息到达率
点击统计
推送别名
标签分组
隐私合规
6.6 数据统计 SDK
友盟
友盟常用于:
用户统计
页面统计
事件埋点
渠道统计
崩溃统计
数据统计要关注:
埋点规范
用户隐私
数据准确性
多渠道统计
事件命名规范
6.7 分享与第三方登录
常见第三方登录:
微信登录
QQ 登录
微博登录
Google 登录
Facebook 登录
Apple 登录
常见分享渠道:
微信好友
微信朋友圈
QQ
微博
系统分享面板
重点关注:
授权流程
Token 管理
回调处理
用户信息获取
隐私授权
平台审核规则
6.8 IM 即时通信 SDK
IM SDK 常见于:
聊天应用
社交应用
直播互动
在线客服
游戏聊天
核心能力:
单聊
群聊
消息收发
离线消息
已读回执
消息撤回
图片、语音、视频消息
会话列表
用户在线状态
6.9 语音助手
语音助手可以归入 AI / 语音交互 SDK 集成方向。
常见能力:
语音识别 ASR
语音合成 TTS
唤醒词
自然语言理解
指令执行
车机语音控制
智能家居控制
七、音视频、图形图像与视觉开发
7.1 Android 音视频开发
Android 音视频开发可以分为:
音频采集
视频采集
编码
解码
渲染
推流
拉流
播放器
音视频同步
核心 API:
MediaCodec
MediaExtractor
MediaMuxer
AudioRecord
AudioTrack
Camera2
SurfaceView
TextureView
7.2 流媒体播放器
流媒体播放器主要处理:
HLS
DASH
RTMP
FLV
点播
直播
缓冲控制
清晰度切换
弱网处理
7.3 音视频播放器框架
1. ijkplayer
ijkplayer 基于 FFmpeg,早期在 Android 音视频项目中非常常见。
适合学习:
FFmpeg 播放器
Native 播放
解码流程
音视频同步
2. ExoPlayer
ExoPlayer 是 Google 推出的 Android 播放器框架。
适合现代 Android 项目使用,支持:
HLS
DASH
DRM
字幕
自定义缓存
自定义渲染器
7.4 NDK / JNI
NDK 和 JNI 用于 Android Java/Kotlin 层与 Native C/C++ 层交互。
常见场景:
音视频开发
图像处理
加密算法
性能敏感模块
复用 C/C++ 库
接入 FFmpeg、OpenCV 等 Native 库
核心知识:
JNI 方法注册
Java 调 C/C++
C/C++ 调 Java
so 库加载
CMake
ABI
内存管理
线程切换
7.5 OpenGL ES
OpenGL ES 用于图形渲染。
常见场景:
视频渲染
滤镜
美颜
贴纸
相机预览
3D 图形
特效动画
核心知识:
EGL
Shader
顶点着色器
片段着色器
纹理
FBO
坐标系
渲染管线
7.6 OpenCV
OpenCV 用于计算机视觉和图像处理。
常见场景:
图像识别
边缘检测
人脸检测
图像滤波
图像矫正
二维码识别
目标追踪
7.7 扫码
ZXing
ZXing 是常见的二维码 / 条形码扫描框架。
常见功能:
二维码识别
条形码识别
相机预览
扫码框 UI
闪光灯控制
扫码结果解析
八、跨平台与混合开发
8.1 Flutter 开发
Flutter 是 Google 推出的跨平台 UI 框架。
特点:
一套代码支持 Android / iOS
自绘 UI
性能较好
热重载
生态成熟
适合场景:
新业务快速开发
跨端统一 UI
独立业务模块
多端一致体验
8.2 React Native
React Native 是基于 JavaScript / TypeScript 的跨平台开发方案。
特点:
使用 React 思想开发移动应用
调用原生组件
支持热更新能力
适合前端团队参与移动端开发
8.3 Hybrid 开发方案
Hybrid 是原生 App 与 Web 技术结合的开发方式。
常见技术:
WebView
Cordova
JSBridge
H5 容器
适合场景:
活动页
内容页
低频业务
快速上线页面
跨端复用页面
重点关注:
WebView 性能
JSBridge 安全
Cookie 同步
H5 与 Native 通信
文件上传
页面缓存
白屏优化
九、Jetpack 与现代 Android 开发
9.1 Jetpack 组件
Jetpack 是现代 Android 开发的重要组成部分。
常见组件:
ViewModel
LiveData
Lifecycle
Room
Navigation
WorkManager
Paging
DataStore
CameraX
Compose
可以重点讲:
生命周期管理
MVVM 架构
数据持久化
后台任务
页面导航
分页加载
十、系统级开发与 ROM 定制
10.1 定制 ROM
定制 ROM 属于 Android 系统开发方向,和普通 App 开发有明显区别。
需要掌握:
AOSP
Framework
SystemServer
Binder
HAL
SELinux
init
系统签名
系统应用权限
OTA
10.2 ROM 开发模块
ROM 开发可以拆成多个系统应用和系统模块。
1. SystemUI
负责系统状态栏、导航栏、通知栏、快捷设置等。
常见内容:
状态栏
导航栏
通知面板
快捷设置
锁屏
音量面板
2. Settings
系统设置应用。
常见内容:
Wi-Fi 设置
蓝牙设置
显示设置
声音设置
应用管理
权限管理
账号设置
3. Launcher
桌面启动器。
常见内容:
桌面图标
小组件
应用抽屉
最近任务入口
壁纸
桌面布局
10.3 AR 眼镜
AR 眼镜可以归到新型 Android 终端或系统定制方向。
涉及内容:
Android 系统定制
相机
传感器
OpenGL 渲染
SLAM
手势识别
语音交互
低功耗优化
多屏显示
十一、性能、稳定性与调试
11.1 日志系统
日志可以分为:
1. 原生日志
Android 原生日志主要使用:
Logcat
Log.d
Log.i
Log.w
Log.e
2. 项目日志框架
项目中通常会封装日志工具,支持:
日志开关
日志级别
文件日志
崩溃日志
线上日志回捞
隐私字段脱敏
11.2 LeakCanary
LeakCanary 是 Android 内存泄漏检测工具。
常见检测场景:
Activity 泄漏
Fragment 泄漏
View 泄漏
Handler 泄漏
单例持有 Context
回调未释放
十二、旧技术与存量项目维护
有些技术现在新项目中不一定推荐使用,但在老项目中仍然可能遇到。
12.1 ButterKnife
ButterKnife 曾经常用于 View 注入。
现在新项目更推荐:
ViewBinding
DataBinding
Jetpack Compose
12.2 xUtils
xUtils 早期提供网络、图片、数据库、注解等能力。
现在这些能力通常被更细分、更现代的框架替代,例如:
OkHttp
Retrofit
Glide
Room
ViewBinding
12.3 EventBus
EventBus 在老项目中仍然常见,但大型项目中容易造成事件流混乱。
建议作为存量项目维护技术掌握,而不是作为新项目首选架构方案。
12.4 SlidingMenu
SlidingMenu 是早期侧滑菜单方案,现在一般可以使用 DrawerLayout 替代。
十三、推荐学习顺序
如果按学习路线来安排,可以分为以下阶段:
第一阶段:Android 应用开发基础
屏幕适配
自定义 View
Android 动画
网络请求
JSON 解析
图片加载
本地存储
SQLite / Room
日志
LeakCanary
第二阶段:项目工程化能力
Jetpack
MMKV
Retrofit + OkHttp
Glide
组件化
路由框架
Dagger2 / Hilt
RxJava / Flow
APK 多渠道包
APK 内置更新
第三阶段:商业项目能力
支付
推送
分享
第三方登录
数据统计
地图
IM
声网
语音助手
第四阶段:高级 Android 能力
NDK / JNI
OpenGL ES
OpenCV
音视频开发
流媒体播放器
ijkplayer
ExoPlayer
插件化
热更新
第五阶段:跨端与系统方向
Flutter
React Native
Hybrid
WebView
Cordova
AR 眼镜
定制 ROM
SystemUI
Settings
Launcher
十四、总结
Android 技术体系非常庞大,不能只按照单个框架来学习,而应该按照能力域来理解。
可以大致分为:
UI 与交互能力
网络与数据能力
存储与缓存能力
架构与工程化能力
第三方 SDK 集成能力
音视频与图形能力
跨平台开发能力
系统 ROM 开发能力
性能与稳定性能力
老项目维护能力
这样整理之后,原本零散的技术点就能形成一套比较完整的 Android 开发知识体系。
Android 开发技术体系全景整理
https://lautung.com/archives/TWLX2xMe
评论