Medium 上 @MindOrks 发布了一篇 2020 年 Android 程序员的学习线路,鉴于一部分人无法阅读原文(你懂得原因),我把这篇文章的内容结合自己的 2020 年的学习计划,一起发出来,给大家一个参考
原文比较简单,并没有介绍为什么要推荐这些,只是单纯地列了一下知识点,我这边针对每个知识点做一些简单的介绍,有些知识点原文并没有提到,我会根据自己的理解加上,仅供参考
这篇文章主要针对 Android 开发者,如果你是新手,那么下面的内容可以帮助你找到学习的线路;如果你是老手,这篇文章列出的内容也可以帮助你查漏补缺。如果各位有什么其他的建议,欢迎留言交流
版本说明(2026-10-13 核查):标题和个人规划保留 2020 年背景,基础知识仍可参考;旧工具、停用服务和学习入口在对应位置更新。现在入门可从 Android Basics with Compose 开始,先做一个能运行、能测试的小应用,再按项目需要补充下面的专题。这里的库不是必须一次全部引入的清单。
新的主线是 Kotlin、Compose/Material 3、生命周期与状态管理、Coroutines/Flow、数据层和测试;维护旧项目仍要学 Java、View/XML 和 Fragment。性能工具、构建和发布规则则按当前版本核对,不能照搬 2020 年配置。
Programming
Java
Java 仍是阅读大量既有 Android App 和 Framework 源码的重要基础,但不宜再称为新 Android 应用的默认首选语言。Google 采用 Kotlin-first 路线,同时继续支持 Java;Framework 也包含 Kotlin、C++ 等代码。
希望深入 Java 虚拟机的同学,也可以参考下面两本书:
读书时区分 Java 语言/JVM 通用概念与 Android ART 的具体实现,不能把 HotSpot 的垃圾回收器、参数和调优结论直接套到 ART;旧书中的源码位置也需匹配系统版本。
Kotlin
Kotlin 应重点掌握空安全、集合、泛型、Java 互操作,以及协程的取消和异常传播。IDE 自动转换能帮助迁移,但不能替代对可空性和生命周期的审查。
原推荐的 Converting to Kotlin Codelab已被官方标为 Deprecated,只留作旧迁移案例。新学习入口使用上面的 Compose 基础课程和 Android Kotlin 文档,不再依赖旧中文镜像。
Flutter
Flutter 作为 Google 的亲儿子,其官方的扶持力度大家有目共睹。这里原来讨论的是 2020 年的 v1.12.13+hotfix.7,不是当前版本;该版本提交记录包含 reportFullyDrawn API level、Skia 扩展和文本 affinity 等修正。当年的 hotfix 解读可作为历史背景,不能据此推断今天所有机型的兼容性。原 Roadmap 是持续更新页面,不能当作固定的 2020 路线快照。
以下保留当时的观察和学习计划:
Flutter 的发展大家可以看一下 Gityuan 的这一篇Flutter 跨平台演进及架构开篇,目前字节跳动的多个 App 已经接入 Flutter 进行混合开发。个人对 2020 年 Flutter 不再持观望态度,读者可以根据自己的技术规划决定是否开始学习
更新入口:本次核查时,官方稳定版发布记录已列到 Flutter 3.47.0,具体补丁版本以 SDK 归档为准。新学习还要包含 Dart、Widget/状态管理、平台互操作和 DevTools;Dart 3 起强制 sound null safety,不能直接照抄 1.x 教程的依赖和代码。Flutter 是跨平台方向,不是每个原生 Android 项目的必选项。
Android Studio
Android Studio IDE Overview
下面保留 2020 年的使用感受:
Android Studio 作为 Android 默认的开发者工具,目前的版本更新已经解决了诸多之前的性能问题,虽然目前对硬件资源的要求仍然比较高,但是一旦你接受了这个设定,真香预警!
AS 主要需要熟悉下面几点
- AS 快捷键
- AS 插件
- AS Profiler:CPU、内存和支持的网络/系统跟踪能力;I/O 分析不等于所有版本都有一个独立的 “I/O Profiler”。
- Layout Inspector、Compose 调试、Logcat、APK Analyzer 和模拟器;具体入口随 Studio 版本变化。
Project Structure — Java/Kotlin/Flutter, XML, .gradle files
熟悉源码与资源目录、Manifest、模块边界、Gradle Wrapper、build.gradle / build.gradle.kts 和 version catalog。Java/Kotlin 与 Flutter 的构建层次不同;不要把 Gradle、Android Gradle Plugin(AGP)、Kotlin 和 JDK 当成同一个版本号。
Android 基础知识
四大组件
下面仍是 Android 组件模型的基础,Compose 不会替代它们:
- Activity — Activity Lifecycle, Tasks & Back Stack;同时学习配置变化和进程重建后的状态恢复。
- Service — 后台组件不等于后台线程;Service 默认在所属进程的主线程运行,还需了解后台启动限制和前台服务要求。
- Broadcast Receiver — 注册方式、导出/权限边界和接收回调的执行限制。
- Content Provider — 数据共享、URI 授权和跨进程调用。
Intents
- Types of Intent - Implicit, Explicit
- Intent Filter
- 组件导出、PendingIntent 可变性和权限;网页跳转还要学习经过域名验证的 Android App Links。
Static User Interface
- View — Button、ImageView、TextView、EditText 等,仍是维护 View 项目和互操作的基础。
- ViewGroup — LinearLayout、RelativeLayout、FrameLayout 是常见传统容器,不是全部布局类型。
- ConstraintLayout — 适合部分复杂约束布局,不能说已统一取代 RelativeLayout 成为所有 App 默认布局。旧 support 包链接改为 AndroidX ConstraintLayout。
- 新 UI 学习 Compose/Material 3,同时掌握状态提升、重组、View/Compose 互操作、无障碍和可调整窗口尺寸;不必为了迁移而一次重写已有页面。
Dynamic User Interface
- RecyclerView — 学习复用、DiffUtil、分页与绑定成本;它提供更多列表能力,但性能不会在任何场景都自动优于 ListView。Compose 对应学习 LazyColumn/LazyRow。
- ViewPager — 旧项目阅读用;ViewPager2 1.1.0目前处于仅关键修复的维护模式,新 Compose 页面可学习 Pager。
- Spinner — 传统 View 选择控件,按实际交互选择;Compose 中结合对应 Material 组件。
CustomView
Android 默认的布局很多时候都没法满足设计的需求,这时候就需要自定义 View,你需要掌握下面几个知识点的使用
- Canvas
- Bitmap
- Paint
还要补测量、布局、触摸事件与无障碍语义。Compose 自定义绘制有自己的 Canvas/Modifier 和布局 API,概念相通,但不能直接套用 View 的生命周期。
UI Resources
相比 HardCode,使用资源文件会让代码的可修改性更高
- Drawables
- String
- Styles
- 多语言、复数、深色主题、字体缩放和尺寸适配;Compose 也需要资源与主题管理。
Fragments
许多人提倡 App 使用 单 Activity + 多个 Fragment 的组合,可见 Fragment 在开发中的重要性,但是 Fragment 的管理又是一门技术,Fragment 的坑,只能在实际开发中慢慢填平了,不过下面的 Fragment 基础还是要牢固
- Fragment Lifecycle
- Fragment Manager
补充区分 Fragment 自身与其 View 的生命周期,正确绑定观察者、协程和 ViewBinding。单 Activity 不意味着必须使用 Fragment;纯 Compose 页面可使用对应的导航与返回栈方案。
Support User Interface
这里列的同样是一些功能组件,需要知道这是什么东西,基本的用法
- ProgressBar - 进度条
- Dialogs - 弹框
- Toast & Snackbar - 提示
同时学习加载、空数据、失败、重试和取消等状态,不要把未知或未加载的数据呈现为零。
Storage
App 开发不免要和文件打交道,文件的读写、存储都是必不可少的,下面列出了几种 Android 中存储相关的知识点
- SharedPreferences — 维护已有键值存储;新需求可评估 DataStore,但它不是关系数据库替代品。
- File Systems — 区分应用私有目录、共享媒体、MediaStore、SAF 与 Photo Picker;存储权限和 scoped storage 行为要结合 Android/API 与 targetSdk,不能沿用任意外部路径读写的旧假设。
- Database — Room提供 SQLite 抽象;学习 schema、查询、事务、迁移与迁移测试。
RoomDatabase是基类名称,不是另一套数据库产品。
Build
Android 项目通常由 Gradle 与 AGP 构建。除 Debug/Release 外,要理解依赖、构建变体、签名和构建缓存;多渠道与字节码改写属于按需进阶专题。
- Gradle / AGP — 例如本次官方发布页为 AGP 9.4.0,按其兼容表选 Gradle、JDK、Studio 和 SDK,不要求旧项目直接跳到该版本。
- Debug / Release Configuration — 在实际 release 配置下检查优化、混淆、资源和依赖行为。
- 多渠道打包 — 区分 product flavor、分发渠道和后端环境,不把机密写进构建产物。
- ASM — 先理解字节码与构建 API;AGP 8.0 已移除旧 Transform API,按用途迁移到 Instrumentation/Artifacts API。
- Baseline Profiles / Startup Profiles — 前者帮助 ART 优化执行,后者用于构建时 DEX 布局;不是一项功能的两个名字,效果要用可复现的启动/交互测试评估。
Threading
Android 组件通常在各自进程的主线程执行;一个多进程应用可以有多个进程主线程。要掌握线程池、线程间通信、生命周期与取消,不只是“开一个工作线程”。
- Threads
- Handler / Looper / Message / MessageQueue
- AIDL / Binder — 同步远端调用可能阻塞调用线程,线程安全不能因使用 Binder 就省略。
- Coroutines / Flow — 协程与线程并非一一对应,
suspend不会自动把阻塞工作移出主线程;学习 dispatcher、结构化并发、取消与生命周期感知收集。 - WorkManager — 适合需要持久调度的工作,不是任意长任务或精确时刻执行的通用替代。
Debugging
这里列举了一些 Debug 的基本手段,实际开发中遇到具体问题的时候一般都会用到,不过有的可能入手难度要高一些,需要花时间去掌握。Debug 工具除了下面这几个还有很多
- Memory profiling — Android Studio Memory Profiler、heap dump 与引用链;MAT 仍可分析兼容的堆转储,不能覆盖全部 native/graphics 内存。
- Logging — 用线程、时间戳与关联标识还原现场,避免记录敏感数据;日志没有某条记录不等于事情没有发生。
- System tracing — 保留 Systrace 系列作为旧 Trace/机制材料,新采集与分析学习 Perfetto。不要把工具迁移理解为旧分析方法全部失效。
- Exceptions / Error Handling — 区分可恢复业务失败、未捕获异常、ANR 与 native crash;不要用捕获所有 Throwable 来掩盖错误。
- Macrobenchmark、JankStats、Android vitals — 分别理解基准测量、帧表现记录与线上聚合,不能把一个指标当作全部性能结论。
Memory Leak
内存泄漏包括 Java/Kotlin 对象长期被引用、native 分配和资源未释放等情况,不能仅凭 RSS 上升判定泄漏。定位难度取决于复现和工具覆盖,不能保证 Java 问题都比 native 简单。
- Detecting and Fixing Memory Leaks — 可学习 LeakCanary、Matrix与平台工具,先确认各模块覆盖的内存类型。
- Context — 生命周期较长的对象持有 Activity/View 等短生命周期对象是常见问题;换成 Application Context 并不是所有泄漏的解法。
- Native Memory Leaks — 学习 native allocation、所有权、资源释放和相应采样/检测工具;Java heap dump 不能包办。
3rd Party Library
经典的第三方类库,可以大幅节约我们的开发时间。下面保留旧名称,并补上本次核查的选型边界:
- Image Loading — Glide 仍可作为 View 项目选项;Picasso 已弃用且不再向 Maven Central 发布新版本,维护旧项目时计划迁移,新项目可评估 Coil 等。
- Dependency Injection — Dagger/Hilt;先掌握依赖注入和构造函数注入,不必给小项目强行引入完整容器。
- Networking — Retrofit/OkHttp。Fast Android Networking 属于原路线中的封装库,是否继续使用应核查其依赖与维护情况,不能仅凭旧推荐直接作为新项目默认。
- Async — Coroutines/Flow 是 Kotlin 常见路线,RxJava 项目仍需理解订阅释放与调度。RxJava 1.x/2.x 已结束支持,不要把旧版本教程与新版本 API 混用;开发分支上的未来版本计划也不等于已发布稳定版。
Data Format
常见的一些数据序列化格式:
- JSON — Gson 处于维护模式,且作者不推荐将其作为 Android 新项目的默认选择;反射、Kotlin 空安全和 R8 保留规则需特别检查。可评估支持代码生成的 kotlinx.serialization 或合适的 Moshi 配置,不能把替换库当作无需迁移测试。
- FlatBuffers — 学习 schema、直接访问数据及其适用场景,不是所有数据都必须换成二进制。
- Protocol Buffers — 学习字段编号与向前/向后兼容,序列化本身不提供加密。
Android Jetpack
Jetpack是库、工具和指南的集合,并不是一个必须整体安装的框架。AndroidX 库与平台分开发布,但各库仍有自己的最低 API、兼容性和维护状态。原来的四类清单混合了平台 API、库和设备形态,按用途理解更合适:
- 基础与 UI — AppCompat、KTX、Compose/Material 3;
minSdk >= 21时系统原生支持 multidex,不要机械添加旧的 multidex 支持库。 - 状态与数据 — Lifecycle、ViewModel、Flow/LiveData、Room、Paging、DataStore;Data Binding 可用于已有 View 项目,Compose 使用自己的状态机制。
- 导航与后台工作 — 按 UI 技术选导航方案(Compose 可学习 Navigation 3),按任务性质选择 WorkManager 或其他后台机制。
- 媒体、通知与设备形态 — 媒体学习 Media3;通知、权限、共享仍需平台知识。Android Auto、TV、Wear OS 是不同设备场景,不能当作普通 UI 控件。旧 Slices 仅按具体宿主与历史项目需求了解,不作为所有新应用的必修组件。
Architecture
传统的开发架构,没有绝对的哪个好哪个不好,只有哪个适合哪个不适合,下面三种你都应该知道并有一定的了解
- MVVM — Model-View-ViewModel,通过可观察状态连接 UI 与状态持有者。
- MVI — Model-View-Intent,通常以用户动作驱动状态变化,再由状态渲染 UI;这里的 Intent 是架构概念,不等于 Android 组件通信的 Intent。
- MVP — Model-View-Presenter,Presenter 协调 View 与数据/业务逻辑。
比名称更需要落实的是职责边界、单向数据流、状态恢复与可测试性,可结合 Android 架构建议学习。不要因为使用了 ViewModel 就默认完成了架构设计。
Unit Testing
- Local Unit Testing — 在本地 JVM 检查纯逻辑、状态变化和数据层;普通本地测试不具备真实 Android Framework 环境。
- Instrumentation Testing — 在设备/模拟器环境验证 Android 集成、数据库、生命周期与 UI;不只等于“点击界面”。
- Compose/View UI、配置变化、进程恢复和无障碍测试;性能验证另外用符合条件的 benchmark,不能拿 Debug 测试耗时当发布版本性能。
Firebase
Firebase 国内很多开发者用不到,这里简单看一下即可(说不定哪天国内就可以用了呢)
上面是 2020 年的使用背景。现在选型要逐产品核对目标设备、网络、SDK 依赖和数据收集设置,不能把整个 Firebase 的可用性一概而论:
- FCM — 核对目标设备的 Google Play 服务等前提,尤其是无 GMS 设备;不要把它当作所有 Android 设备必达的推送通道。
- Crashlytics
- Analytics
- Remote Config
- App Indexing — Google Search App 已不再使用其索引的本地内容。网页到应用的跳转学习 Android App Links;本机内容检索可另学 AppSearch,两者用途不同。
- Dynamic Links — 已过期:官方停用日期为 2025-08-25,新项目不再接入。按 迁移说明选择 App Links/其他方案;App Links 本身不等价于完整的安装后延迟深链、短链统计和归因服务。
Security
安全方面接触毕竟多的应该是加密、解密、混淆等,毕竟用户数据安全大于一切,不重视这个欧盟会教你做人
- Encrypt / Decrypt — 学习标准加密方案、Android Keystore、密钥管理和传输安全;客户端产物中的静态字符串不是秘密保管方式。
- ProGuard / R8 — AGP 3.4 起默认使用 R8。理解压缩、优化、混淆及 keep 规则;这些不等于加密,不能替代鉴权或访问控制。
- 权限、导出组件、URI 授权、WebView/深链输入与日志数据;参照 Android 安全指南,并在实际 Release 配置下验证。
App Release
应用发布相关的知识,国内分发还可按需要了解多渠道打包;插件化不是必修。
.keystore/ 签名 — 理解证书与私钥、备份和升级签名一致性;Play App Signing下上传密钥与应用签名密钥可以不同。- App Bundle — AAB 是发布格式,不是直接安装包;需要生成适配设备的 APK/split APK,并测试实际交付结果。
- Play Store — 本次核查的 target API 要求规定,自 2026-08-31 起普通手机/平板新应用和更新需 target Android 16/API 36 以上;Wear/Automotive/TV/XR、存量应用和获批延期另有规则。发布时再核对,不把这一天的要求永久写死。
- 多渠道打包 — 根据实际分发需求学习;包含 native 库的应用还需检查 ABI、第三方
.so及 Android 15 起的 16 KB 页大小兼容。 - 插件化 — 按项目需求研究,受平台与分发约束,不是上架的必需步骤。发布质量还包括崩溃/ANR、权限与数据声明、多设备测试及回滚安排。
Keep Learning and Improving
作为一个有进取心的 Android 开发者,拥有自己的技术栈和规划非常重要,技术栈确保你有足够的市场竞争力,从而形成护城河;技术规划则可以给你一个明确的学习目标。卸载抖音、微博、斗鱼、游戏吧,做好 2020 年的规划,Keep Learning and Improving ,共勉
如果你苦于没有好的时间管理方法,可以参考这个视频我是怎么做周计划 | 生产力提升 | 我的方法,这个是我熟悉的一个大佬的工作学习方法实践,推荐给大家
凡是预则立,不预则废,年度计划太长,日计划又太短。实践下来发现以周为单位做时间管理(时间管理)最靠谱,既考虑了短期又考虑了长期,可以使自己长期坚持做某事,也有一定的时间长度用来甄有价值的事情。
本文其他地址
由于博客留言交流不方便,点赞或者交流,可以移步本文的知乎或者掘金页面
关于我 && 博客
下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!
- 博主个人介绍 :里面有个人的微信和微信群链接。
- 本博客内容导航 :个人博客内容的一个导航。
- 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
- Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。
一个人可以走的更快 , 一群人可以走的更远
