EN

Android 开发者学习路线(2020 版本)

字数统计: 5.1k阅读时长: 18 min
2020/02/03
loading

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 虚拟机的同学,也可以参考下面两本书:

  1. 周志明的《深入理解Java虚拟机(第3版)》
  2. 邓老师的 《深入理解Android Java 虚拟机 ART》

读书时区分 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 主要需要熟悉下面几点

  1. AS 快捷键
  2. AS 插件
  3. AS Profiler:CPU、内存和支持的网络/系统跟踪能力;I/O 分析不等于所有版本都有一个独立的 “I/O Profiler”。
  4. 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 不会替代它们:

  1. Activity — Activity Lifecycle, Tasks & Back Stack;同时学习配置变化和进程重建后的状态恢复。
  2. Service — 后台组件不等于后台线程;Service 默认在所属进程的主线程运行,还需了解后台启动限制和前台服务要求。
  3. Broadcast Receiver — 注册方式、导出/权限边界和接收回调的执行限制。
  4. Content Provider — 数据共享、URI 授权和跨进程调用。

Intents

  1. Types of Intent - Implicit, Explicit
  2. Intent Filter
  3. 组件导出、PendingIntent 可变性和权限;网页跳转还要学习经过域名验证的 Android App Links。

Static User Interface

  1. View — Button、ImageView、TextView、EditText 等,仍是维护 View 项目和互操作的基础。
  2. ViewGroup — LinearLayout、RelativeLayout、FrameLayout 是常见传统容器,不是全部布局类型。
  3. ConstraintLayout — 适合部分复杂约束布局,不能说已统一取代 RelativeLayout 成为所有 App 默认布局。旧 support 包链接改为 AndroidX ConstraintLayout。
  4. 新 UI 学习 Compose/Material 3,同时掌握状态提升、重组、View/Compose 互操作、无障碍和可调整窗口尺寸;不必为了迁移而一次重写已有页面。

Dynamic User Interface

  1. RecyclerView — 学习复用、DiffUtil、分页与绑定成本;它提供更多列表能力,但性能不会在任何场景都自动优于 ListView。Compose 对应学习 LazyColumn/LazyRow。
  2. ViewPager — 旧项目阅读用;ViewPager2 1.1.0目前处于仅关键修复的维护模式,新 Compose 页面可学习 Pager。
  3. Spinner — 传统 View 选择控件,按实际交互选择;Compose 中结合对应 Material 组件。

CustomView

Android 默认的布局很多时候都没法满足设计的需求,这时候就需要自定义 View,你需要掌握下面几个知识点的使用

  1. Canvas
  2. Bitmap
  3. Paint

还要补测量、布局、触摸事件与无障碍语义。Compose 自定义绘制有自己的 Canvas/Modifier 和布局 API,概念相通,但不能直接套用 View 的生命周期。

UI Resources

相比 HardCode,使用资源文件会让代码的可修改性更高

  1. Drawables
  2. String
  3. Styles
  4. 多语言、复数、深色主题、字体缩放和尺寸适配;Compose 也需要资源与主题管理。

Fragments

许多人提倡 App 使用 单 Activity + 多个 Fragment 的组合,可见 Fragment 在开发中的重要性,但是 Fragment 的管理又是一门技术,Fragment 的坑,只能在实际开发中慢慢填平了,不过下面的 Fragment 基础还是要牢固

  1. Fragment Lifecycle
  2. Fragment Manager

补充区分 Fragment 自身与其 View 的生命周期,正确绑定观察者、协程和 ViewBinding。单 Activity 不意味着必须使用 Fragment;纯 Compose 页面可使用对应的导航与返回栈方案。

Support User Interface

这里列的同样是一些功能组件,需要知道这是什么东西,基本的用法

  1. ProgressBar - 进度条
  2. Dialogs - 弹框
  3. Toast & Snackbar - 提示

同时学习加载、空数据、失败、重试和取消等状态,不要把未知或未加载的数据呈现为零。

Storage

App 开发不免要和文件打交道,文件的读写、存储都是必不可少的,下面列出了几种 Android 中存储相关的知识点

  1. SharedPreferences — 维护已有键值存储;新需求可评估 DataStore,但它不是关系数据库替代品。
  2. File Systems — 区分应用私有目录、共享媒体、MediaStore、SAF 与 Photo Picker;存储权限和 scoped storage 行为要结合 Android/API 与 targetSdk,不能沿用任意外部路径读写的旧假设。
  3. Database — Room提供 SQLite 抽象;学习 schema、查询、事务、迁移与迁移测试。RoomDatabase 是基类名称,不是另一套数据库产品。

Build

Android 项目通常由 Gradle 与 AGP 构建。除 Debug/Release 外,要理解依赖、构建变体、签名和构建缓存;多渠道与字节码改写属于按需进阶专题。

  1. Gradle / AGP — 例如本次官方发布页为 AGP 9.4.0,按其兼容表选 Gradle、JDK、Studio 和 SDK,不要求旧项目直接跳到该版本。
  2. Debug / Release Configuration — 在实际 release 配置下检查优化、混淆、资源和依赖行为。
  3. 多渠道打包 — 区分 product flavor、分发渠道和后端环境,不把机密写进构建产物。
  4. ASM — 先理解字节码与构建 API;AGP 8.0 已移除旧 Transform API,按用途迁移到 Instrumentation/Artifacts API。
  5. Baseline Profiles / Startup Profiles — 前者帮助 ART 优化执行,后者用于构建时 DEX 布局;不是一项功能的两个名字,效果要用可复现的启动/交互测试评估。

Threading

Android 组件通常在各自进程的主线程执行;一个多进程应用可以有多个进程主线程。要掌握线程池、线程间通信、生命周期与取消,不只是“开一个工作线程”。

  1. Threads
  2. Handler / Looper / Message / MessageQueue
  3. AIDL / Binder — 同步远端调用可能阻塞调用线程,线程安全不能因使用 Binder 就省略。
  4. Coroutines / Flow — 协程与线程并非一一对应,suspend 不会自动把阻塞工作移出主线程;学习 dispatcher、结构化并发、取消与生命周期感知收集。
  5. WorkManager — 适合需要持久调度的工作,不是任意长任务或精确时刻执行的通用替代。

Debugging

这里列举了一些 Debug 的基本手段,实际开发中遇到具体问题的时候一般都会用到,不过有的可能入手难度要高一些,需要花时间去掌握。Debug 工具除了下面这几个还有很多

  1. Memory profiling — Android Studio Memory Profiler、heap dump 与引用链;MAT 仍可分析兼容的堆转储,不能覆盖全部 native/graphics 内存。
  2. Logging — 用线程、时间戳与关联标识还原现场,避免记录敏感数据;日志没有某条记录不等于事情没有发生。
  3. System tracing — 保留 Systrace 系列作为旧 Trace/机制材料,新采集与分析学习 Perfetto。不要把工具迁移理解为旧分析方法全部失效。
  4. Exceptions / Error Handling — 区分可恢复业务失败、未捕获异常、ANR 与 native crash;不要用捕获所有 Throwable 来掩盖错误。
  5. Macrobenchmark、JankStats、Android vitals — 分别理解基准测量、帧表现记录与线上聚合,不能把一个指标当作全部性能结论。

Memory Leak

内存泄漏包括 Java/Kotlin 对象长期被引用、native 分配和资源未释放等情况,不能仅凭 RSS 上升判定泄漏。定位难度取决于复现和工具覆盖,不能保证 Java 问题都比 native 简单。

  1. Detecting and Fixing Memory Leaks — 可学习 LeakCanary、Matrix与平台工具,先确认各模块覆盖的内存类型。
  2. Context — 生命周期较长的对象持有 Activity/View 等短生命周期对象是常见问题;换成 Application Context 并不是所有泄漏的解法。
  3. Native Memory Leaks — 学习 native allocation、所有权、资源释放和相应采样/检测工具;Java heap dump 不能包办。

3rd Party Library

经典的第三方类库,可以大幅节约我们的开发时间。下面保留旧名称,并补上本次核查的选型边界:

  1. Image Loading — Glide 仍可作为 View 项目选项;Picasso 已弃用且不再向 Maven Central 发布新版本,维护旧项目时计划迁移,新项目可评估 Coil 等。
  2. Dependency Injection — Dagger/Hilt;先掌握依赖注入和构造函数注入,不必给小项目强行引入完整容器。
  3. Networking — Retrofit/OkHttp。Fast Android Networking 属于原路线中的封装库,是否继续使用应核查其依赖与维护情况,不能仅凭旧推荐直接作为新项目默认。
  4. Async — Coroutines/Flow 是 Kotlin 常见路线,RxJava 项目仍需理解订阅释放与调度。RxJava 1.x/2.x 已结束支持,不要把旧版本教程与新版本 API 混用;开发分支上的未来版本计划也不等于已发布稳定版。

Data Format

常见的一些数据序列化格式:

  1. JSON — Gson 处于维护模式,且作者不推荐将其作为 Android 新项目的默认选择;反射、Kotlin 空安全和 R8 保留规则需特别检查。可评估支持代码生成的 kotlinx.serialization 或合适的 Moshi 配置,不能把替换库当作无需迁移测试。
  2. FlatBuffers — 学习 schema、直接访问数据及其适用场景,不是所有数据都必须换成二进制。
  3. Protocol Buffers — 学习字段编号与向前/向后兼容,序列化本身不提供加密。

Android Jetpack

Jetpack是库、工具和指南的集合,并不是一个必须整体安装的框架。AndroidX 库与平台分开发布,但各库仍有自己的最低 API、兼容性和维护状态。原来的四类清单混合了平台 API、库和设备形态,按用途理解更合适:

  1. 基础与 UI — AppCompat、KTX、Compose/Material 3;minSdk >= 21 时系统原生支持 multidex,不要机械添加旧的 multidex 支持库。
  2. 状态与数据 — Lifecycle、ViewModel、Flow/LiveData、Room、Paging、DataStore;Data Binding 可用于已有 View 项目,Compose 使用自己的状态机制。
  3. 导航与后台工作 — 按 UI 技术选导航方案(Compose 可学习 Navigation 3),按任务性质选择 WorkManager 或其他后台机制。
  4. 媒体、通知与设备形态 — 媒体学习 Media3;通知、权限、共享仍需平台知识。Android Auto、TV、Wear OS 是不同设备场景,不能当作普通 UI 控件。旧 Slices 仅按具体宿主与历史项目需求了解,不作为所有新应用的必修组件。

Architecture

传统的开发架构,没有绝对的哪个好哪个不好,只有哪个适合哪个不适合,下面三种你都应该知道并有一定的了解

  1. MVVM — Model-View-ViewModel,通过可观察状态连接 UI 与状态持有者。
  2. MVI — Model-View-Intent,通常以用户动作驱动状态变化,再由状态渲染 UI;这里的 Intent 是架构概念,不等于 Android 组件通信的 Intent。
  3. MVP — Model-View-Presenter,Presenter 协调 View 与数据/业务逻辑。

比名称更需要落实的是职责边界、单向数据流、状态恢复与可测试性,可结合 Android 架构建议学习。不要因为使用了 ViewModel 就默认完成了架构设计。

Unit Testing

  1. Local Unit Testing — 在本地 JVM 检查纯逻辑、状态变化和数据层;普通本地测试不具备真实 Android Framework 环境。
  2. Instrumentation Testing — 在设备/模拟器环境验证 Android 集成、数据库、生命周期与 UI;不只等于“点击界面”。
  3. Compose/View UI、配置变化、进程恢复和无障碍测试;性能验证另外用符合条件的 benchmark,不能拿 Debug 测试耗时当发布版本性能。

Firebase

Firebase 国内很多开发者用不到,这里简单看一下即可(说不定哪天国内就可以用了呢)

上面是 2020 年的使用背景。现在选型要逐产品核对目标设备、网络、SDK 依赖和数据收集设置,不能把整个 Firebase 的可用性一概而论:

  1. FCM — 核对目标设备的 Google Play 服务等前提,尤其是无 GMS 设备;不要把它当作所有 Android 设备必达的推送通道。
  2. Crashlytics
  3. Analytics
  4. Remote Config
  5. App Indexing — Google Search App 已不再使用其索引的本地内容。网页到应用的跳转学习 Android App Links;本机内容检索可另学 AppSearch,两者用途不同。
  6. Dynamic Links — 已过期:官方停用日期为 2025-08-25,新项目不再接入。按 迁移说明选择 App Links/其他方案;App Links 本身不等价于完整的安装后延迟深链、短链统计和归因服务。

Security

安全方面接触毕竟多的应该是加密、解密、混淆等,毕竟用户数据安全大于一切,不重视这个欧盟会教你做人

  1. Encrypt / Decrypt — 学习标准加密方案、Android Keystore、密钥管理和传输安全;客户端产物中的静态字符串不是秘密保管方式。
  2. ProGuard / R8 — AGP 3.4 起默认使用 R8。理解压缩、优化、混淆及 keep 规则;这些不等于加密,不能替代鉴权或访问控制。
  3. 权限、导出组件、URI 授权、WebView/深链输入与日志数据;参照 Android 安全指南,并在实际 Release 配置下验证。

App Release

应用发布相关的知识,国内分发还可按需要了解多渠道打包;插件化不是必修。

  1. .keystore / 签名 — 理解证书与私钥、备份和升级签名一致性;Play App Signing下上传密钥与应用签名密钥可以不同。
  2. App Bundle — AAB 是发布格式,不是直接安装包;需要生成适配设备的 APK/split APK,并测试实际交付结果。
  3. Play Store — 本次核查的 target API 要求规定,自 2026-08-31 起普通手机/平板新应用和更新需 target Android 16/API 36 以上;Wear/Automotive/TV/XR、存量应用和获批延期另有规则。发布时再核对,不把这一天的要求永久写死。
  4. 多渠道打包 — 根据实际分发需求学习;包含 native 库的应用还需检查 ABI、第三方 .so 及 Android 15 起的 16 KB 页大小兼容。
  5. 插件化 — 按项目需求研究,受平台与分发约束,不是上架的必需步骤。发布质量还包括崩溃/ANR、权限与数据声明、多设备测试及回滚安排。

Keep Learning and Improving

作为一个有进取心的 Android 开发者,拥有自己的技术栈和规划非常重要,技术栈确保你有足够的市场竞争力,从而形成护城河;技术规划则可以给你一个明确的学习目标。卸载抖音、微博、斗鱼、游戏吧,做好 2020 年的规划,Keep Learning and Improving ,共勉

如果你苦于没有好的时间管理方法,可以参考这个视频我是怎么做周计划 | 生产力提升 | 我的方法,这个是我熟悉的一个大佬的工作学习方法实践,推荐给大家

凡是预则立,不预则废,年度计划太长,日计划又太短。实践下来发现以周为单位做时间管理(时间管理)最靠谱,既考虑了短期又考虑了长期,可以使自己长期坚持做某事,也有一定的时间长度用来甄有价值的事情。

本文其他地址

由于博客留言交流不方便,点赞或者交流,可以移步本文的知乎或者掘金页面

知乎 - Android 开发者学习路线(2020 版)

关于我 && 博客

下面是个人的介绍和相关的链接,期望与同行的各位多多交流,三人行,则必有我师!

  1. 博主个人介绍 :里面有个人的微信和微信群链接。
  2. 本博客内容导航 :个人博客内容的一个导航。
  3. 个人整理和搜集的优秀博客文章 - Android 性能优化必知必会 :欢迎大家自荐和推荐 (微信私聊即可)
  4. Android性能优化知识星球:付费社群已于 2026 年停止运营,不再招收新成员;此处保留历史介绍。

一个人可以走的更快 , 一群人可以走的更远

微信扫一扫

CATALOG
  1. 1. Programming
    1. 1.1. Java
    2. 1.2. Kotlin
    3. 1.3. Flutter
  2. 2. Android Studio
    1. 2.1. Android Studio IDE Overview
    2. 2.2. Project Structure — Java/Kotlin/Flutter, XML, .gradle files
  3. 3. Android 基础知识
    1. 3.1. 四大组件
    2. 3.2. Intents
    3. 3.3. Static User Interface
    4. 3.4. Dynamic User Interface
    5. 3.5. CustomView
    6. 3.6. UI Resources
    7. 3.7. Fragments
    8. 3.8. Support User Interface
    9. 3.9. Storage
    10. 3.10. Build
    11. 3.11. Threading
  4. 4. Debugging
  5. 5. Memory Leak
  6. 6. 3rd Party Library
  7. 7. Data Format
  8. 8. Android Jetpack
  9. 9. Architecture
  10. 10. Unit Testing
  11. 11. Firebase
  12. 12. Security
  13. 13. App Release
  14. 14. Keep Learning and Improving
  15. 15. 本文其他地址
  16. 16. 关于我 && 博客