2027 Android 开发者路线图:学习、面试与 AI

0 阅读33分钟

本文译自「Android Developer Roadmap 2027: What to Learn, What Interviews Ask, and Where AI Fits」,原文链接medium.com/proandroidd…,由Mayank Kumar发布于2026年10月30日。

0.jpg

如果你是一名安卓开发者,你现在可能会问自己三个问题:

  1. 我接下来应该学什么?
  2. 既然人工智能已经可以编写代码,这些知识还有意义吗?
  3. 面试官会问我什么问题?

过去一年并没有让情况变得更容易。2026 年 5 月,谷歌宣布 Android UI 现在以 Compose 为先,并将 Compose 取代的 View 组件置于维护模式:仅修复关键 bug,不添加新功能,但也没有移除它们的计划。同一天,Android CLI 1.0 正式发布,AI 代理可以构建和运行 Android 应用。此外,据报道,谷歌正在试点使用 Gemini 进行编程面试。

这篇文章解答了所有这三个问题。它是一份完整的2027年发展路线图:学习什么、学习顺序、学习深度、面试官在每个阶段会问什么,以及人工智能在其中扮演什么角色。

简答: 首先学习 Kotlin 和 Android 平台,然后是协程、Compose 和架构,接着是数据、测试、生产环境和系统设计。在每个阶段都要使用 AI,但速度要快到你能快速验证其结果。面试会考察这些内容,外加编码题和设计题。

我参考了官方的 Android Developers 和 Kotlin 文档、开发者近期公开的访谈记录,以及我在实际 Android 生产环境中观察到的情况,构建了这份路线图。这是我自己的路线图,并非 Google 或 JetBrains 发布的路线图。

展望 2027 年,Android 开发者面临哪些变化?

只有当产品路线图与你将要发布的平台相匹配时,它才有用。过去一年来的变化会影响你应该学习的内容,请优先学习最新的内容。

  • 2027年2月1日: Play 商店将阻止不支持 16 KB 内存页的应用更新(目标平台为 Android 15 及以上)。学习提示:即使你从未编写过 C++ 代码,也需要了解原生库和你的构建方式如何影响此机制。
  • 2027年: 开发者验证 将扩展到所有在已认证 Android 设备上发布的应用。学习提示:即使是通过 Play 商店以外的渠道发布的应用也需要经过开发者验证。
  • 2026年8月31日: 新应用和更新必须 目标平台为 Android 16 (API 36)。学习提示:你必须了解 API 36 的行为变化,而不仅仅是 API 本身。
  • 2026 年 7 月: Google 表示,排名前 1000 的应用中有超过 68% 在生产环境中使用 Compose。学习建议:Compose 是雇主默认要求的技能。
  • 2026 年 5 月 19 日: Compose 优先:Views 仅获得关键 bug 修复,不添加新功能。学习建议:先学习 Compose;学习 Views 以便维护旧代码。
  • 2026年5月19日: Android CLI 1.0 和面向人工智能代理的 Android 技能。学习内容:代理可以构建和运行 Android 应用;你的工作重点将转移到检查它们的运行情况。

这些都不能取代基础知识。它们大多更适合那些已经理解生命周期、状态和构建的人。

你应该如何看待 2027 年?

在列出主题之前,先列出五条规则。它们比任何单一的库都重要。

  1. 先掌握基础知识,再考虑工具。 库每年都在更新换代。生命周期、状态、线程和数据流在过去十年里变化不大。学习那些在 2030 年仍然适用的知识。
  2. 一个项目,而非十个教程。 构建一个应用程序,并在每个阶段不断改进它。从修复自己的设计中学习到的东西,比完成别人的项目要多得多。
  3. 使用 AI,但要进行验证。 让 AI 编写代码、解释和提出建议。然后通过测试、性能分析器或文档来验证其正确性。如果无法验证,就说明你还没有准备好发布它。
  4. 深入钻研一个领域。 在所有九个阶段都保持扎实的技能,然后选择一个领域深入钻研:性能、架构、测试、AI 功能或 Kotlin 多平台 (KMP)。深度是成为一名高级工程师的关键。
  5. 展示你的成果。 GitHub 代码库、简短的文档或演讲比证书更有说服力。它还能为你提供真实的面试素材。

路线图概览

每个阶段都依赖于前一个阶段。在理解状态之前,组合(Compose)的概念意义不大。在理解生命周期和进程终止之前,状态的概念意义不大。跳过某个阶段,你仍然可以发布功能,但最终只能靠猜测进行调试。人工智能(AI)会使情况更糟,因为它会给你更多需要猜测的代码。

  • 1. Kotlin 和 DSA 基础: 语言、集合、泛型、面向对象编程 (OOP)、DSA、Git、Gradle。达标标准:构建并测试一个小型 Kotlin 项目,并解释你的选择。
  • 2. Android 平台: 组件、生命周期、进程终止、窗口边衬区、权限、后台限制。达标标准:说明操作系统终止应用时会发生什么,并证明状态会恢复。
  • 3. 协程和 Flow: 结构化并发、取消、调度器、StateFlow。达标标准:无 bug 地处理取消、失败和同时处理两个请求。
  • 4. Compose UI: 状态、重组、副作用、Navigation 3、自适应布局。达标标准:构建一个包含加载、错误、空和数据状态的多屏应用。
  • 5. 架构: UI 层和数据层、单向数据流、ViewModel、依赖注入、模块。达标标准:捍卫你设计的每个功能层。
  • 6. 数据和离线: HTTP、Room、DataStore、缓存、同步、数据库迁移。达标标准:确保在网络缓慢或中断时,功能仍然可用。
  • 7. 测试: 伪实现(Fakes)、ViewModel 和 Flow 测试、Compose UI 测试、持续集成。达标标准:自动捕获真正的回归问题。
  • 8. 生产环境: 性能分析、卡顿、ANR、Baseline Profiles(基准配置文件)、R8、安全性、版本发布。达标标准:重现问题、修复问题,并展示修复前后的数据对比。
  • 9. 系统设计: 移动端设计、同步、故障处理、内部机制。达标标准:设计一个应用程序,并针对两种不同的方案进行辩护。

1 (1).png

如果你已经是 Android 开发人员,请不要默认从第一阶段开始。使用“完成条件”检查作为测试,并从你无法通过的第一个阶段开始。

九个阶段

每个阶段都包含相同的部分:为什么它很重要,你必须知道什么,当你想要深入了解时要学习什么,从哪里开始,它为你准备的面试问题,以及一个自我测试的练习。

第一阶段:Kotlin 和 DSA 基础知识

Kotlin 是 Android 的编程语言。掌握它的语法很容易,但要了解这门语言的功能以及它的局限性,则需要更长时间。这个阶段还会考察数据结构和算法 (DSA),大多数 Android 面试仍然会在编程环节考察这方面的内容。

必知

  • 类型:val 和 var,类型推断,空安全(?.、?:、!!、let),智能类型转换
  • 函数:默认参数和命名参数,扩展函数和中缀函数,lambda 表达式,高阶函数,inline 和 reified
  • 类:数据类、密封类、枚举类、对象类、伴生对象类、值类、接口、可见性
  • 泛型:方差(in、out),星号投影(*)及其存在意义
  • 集合:只读集合与可变集合、序列、map、filter、fold、groupBy
  • 相等性:== 与 ===,equals 和 hashCode
  • 惯用法:作用域函数、by lazy、类委托、lateinit、异常
  • 设计:面向对象编程 (OOP)、SOLID 原则以及 Android 开发中常见的设计模式(构建器、工厂模式、观察者模式、策略模式、适配器模式、单例模式)
  • 数据结构与算法 (DSA)基础知识:大O表示法、数组、字符串、哈希表、链表、树、图、递归、基本动态规划
  • 工具:Git、Gradle基础知识(含Kotlin DSL和版本目录)

深入了解

  • Kotlin 和 Java 互操作(@JvmStatic、@JvmOverloads、平台类型)
  • 读取 Kotlin 生成的字节码
  • DSL 构建器、契约、上下文参数
  • 使用 KSP 处理注解

**从哪里开始:**首先阅读Kotlin 文档,然后阅读Kotlin 2.4 的新特性,了解该语言的发展方向。

面试问题

  • lateinit 与 by lazy:何时使用哪一种?
  • 扩展函数编译后会生成什么?它可以访问私有成员吗?
  • 为什么可以传递 List<String> 而不是 List<Any>?为什么不能传递 MutableList<String>?
  • (高级)inline 在调用点会改变什么?为什么 reified 需要它?
  • (高级)by lazy 默认如何处理线程?何时需要更改它?

试试这个: 编写一个包含四个状态的密封 UiState 对象,并添加一个处理这些状态的 when 函数。再添加第五个状态。观察编译器的处理方式,并解释为什么这就是密封类型存在的意义。

第二阶段:安卓平台

这是人们常常跳过的阶段,也是许多生产环境中的 bug 滋生的地方。此外,平台本身也在不断变化。面向 Android 16 的应用无法再选择退出边到边显示,默认启用预测性返回,并且在大屏幕上会忽略屏幕方向和窗口尺寸限制。面向 Android 17 的应用失去了大屏幕退出选项,并且需要新的本地网络访问权限。

必知

  • 应用组件:Activity、Service、BroadcastReceiver、ContentProvider
  • Intent:显式和隐式意图、意图过滤器、PendingIntent、深度链接和应用链接
  • 生命周期:Activity、Fragment(针对现有代码)和进程生命周期、进程优先级
  • 配置更改和进程终止:SavedStateHandle、rememberSaveable、保存哪些内容以及重新加载哪些内容
  • 任务、返回栈和启动模式
  • 上下文类型以及每种上下文的可用时机
  • 资源、限定符和清单文件
  • 权限:运行时权限和特殊权限、照片选择器、作用域存储
  • 通知和渠道;前台服务及其类型
  • 后台限制:Doze 模式、应用待机模式、哪些应用可以在后台运行
  • 窗口:边到边显示、窗口边衬区(系统栏、键盘和刘海占用的空间)、预测性返回、大屏幕和可折叠设备
  • 主线程、Looper 和 Handler

深入了解

  • Binder 和进程间通信
  • Zygote 以及应用进程的启动方式
  • 应用启动库、多窗口、应用包和功能交付
  • 养成阅读每个 Android 版本“行为变更”页面的习惯

从哪里开始: Activity 生命周期 和 保存 UI 状态 指南。

面试问题

  • 请详细讲解用户旋转屏幕后按下 Home 键时 Activity 的生命周期。
  • ViewModel 如何在配置更改后保持运行?它能否在进程终止后继续运行?
  • singleTop 和 singleTask:何时使用哪一种?
  • Started 服务和 bound 服务的区别是什么?服务何时必须在前台运行?
  • (高级)你会如何查找应用中当前存在的进程终止相关的 bug?

试试这个: 打开你的应用,填写表单,按下 Home 键,然后运行 adb shell am kill <你的包名>。再从最近使用的应用列表中打开它。表单恢复了吗?

第三阶段:协程与 Flow

许多安卓系统中“偶尔发生”的bug都是并发性bug。这也是人工智能编写的代码最常出现看似正确实则错误的情况。

必知

  • 挂起函数;launch、async、runBlocking
  • 作用域:CoroutineScope、viewModelScope、lifecycleScope
  • 结构化并发:Job、父协程与子协程,以及作用域为何会等待其子项
  • 调度器和withContext;绝不阻塞主线程
  • 取消:它是协作式的; isActive、ensureActive、重新抛出 CancellationException
  • 异常:传播、CoroutineExceptionHandler、SupervisorJob、supervisorScope、超时
  • Flow:冷流、运算符(map、combine、flatMapLatest、debounce)、catch
  • StateFlow 和 SharedFlow、stateIn 和 shareIn、WhileSubscribed
  • 安全收集:repeatOnLifecycle、collectAsStateWithLifecycle
  • 使用 callbackFlow 桥接回调;使用 Mutex 保护共享状态
  • 用于即使应用关闭也必须完成的工作的 WorkManager
  • 使用 runTest 和测试调度器进行测试

深入了解

  • 延续和编译器生成的状态机
  • 通道和 select
  • flowOn、buffer、conflate 和背压(当生产者比收集者快时)
  • 线程、线程池和 Java 内存模型基础知识
  • RxJava 对旧代码的互操作性

**从哪里开始:**首先是Kotlin协程指南,然后是Android的协程最佳实践。

面试问题

  • launch 与 async 的区别?
  • StateFlow 与 SharedFlow:何时使用哪一种?
  • 当一个子协程失败时,其他子协程会发生什么?supervisorScope 如何影响这一点?
  • 在 ViewModel 中应该在哪里发起 API 调用,以及应该调用哪个调度器?
  • (高级)为什么捕获 CancellationException 很危险?(参见 AI 部分的代码片段。)
  • (高级)Flow 如何处理快速生产者和慢速收集者?

试试这个: 在 coroutineScope 中使用 async 发起两个请求,并让其中一个失败。另一个会发生什么?切换到 supervisorScope 并解释其中的区别。

第四阶段:Compose UI

谷歌现在表示所有 Android UI 都应该使用 Compose 构建。视图仍然可以正常工作并获得关键修复,但不会添加任何新功能。此阶段的目标不是创建页面,而是预测页面何时以及为何需要重组。

必知

  • 可组合函数、Row、Column、Box,以及修饰符顺序的重要性
  • Material 3 和主题
  • 状态:remember、mutableStateOf、rememberSaveable
  • 状态提升和单向数据流(UDF):状态向下流向 UI,事件向上流动
  • 重组、跳过和稳定性
  • 副作用:LaunchedEffect、DisposableEffect、rememberCoroutineScope、derivedStateOf、snapshotFlow
  • 惰性列表以及键的重要性
  • Navigation 3
  • 表单、文本输入和图像加载
  • 预览和 CompositionLocal
  • 语义和辅助功能
  • 窗口大小类和适用于手机、折叠屏设备和平板电脑的自适应布局
  • 基本动画

深入了解

  • 三个阶段:组合、布局和绘制
  • 自定义布局、Modifier.Node 和 Canvas 绘制
  • 快照系统和槽表(Compose 在重新合成之间保存状态)
  • Compose 编译器稳定性报告
  • 现有应用的 View 互操作,以及用于小部件的 Glance。

从哪里开始:Compose 中的思维,然后是Compose 性能指南。

面试问题

  • 什么会触发重新组合?
  • remember 和 rememberSaveable 有什么区别?
  • 何时使用 LaunchedEffect?当它的键发生变化时会发生什么?
  • 什么使一个类稳定?为什么这很重要?
  • (高级)列表在滚动时出现卡顿。如何找出原因?
  • (高级)Compose 如何在重新组合之间记住状态?(槽表)

试试这个: 在布局检查器中启用重组计数,然后滚动列表。找到一个重组次数过多的组合元素,并修复它。

第五阶段:架构

谷歌的架构建议是一个很好的基准。他们强烈建议使用数据层,包括仓库、单向数据流(UDF)和依赖注入。他们建议仅在业务逻辑需要在多个 ViewModel 之间复用,或者 ViewModel 变得过于复杂时才使用领域层。架构应该解决你遇到的问题。一个小型应用不需要每一层。

必知

  • 层:UI 层、数据层以及可选的领域层
  • ViewModel:它拥有什么,以及它绝对不能持有什么(Context 或 View)
  • UI 状态:一个 uiState 作为 StateFlow,使用数据和密封类进行建模
  • 一次性事件,例如导航或 Snackbar
  • 仓库、数据源和单一数据源
  • MVVM 与 MVI 风格的状态处理
  • 依赖注入:构造函数优先注入、Hilt 模块、作用域和 @HiltViewModel
  • 层间模型映射;建模错误
  • SOLID 原则在 Android 代码中的应用

深入了解

  • 模块化: 功能模块和核心模块、API 模块和实现模块
  • Gradle 约定插件
  • 整洁架构及其优缺点
  • 其他依赖注入选项以及何时手动依赖注入就足够了
  • 以 Google 的 Now in Android 示例应用为例

从哪里开始: 应用程序架构指南 和 建议页面。

面试问题

  • 为什么公开 StateFlow 而不是 MutableStateFlow?
  • MVVM 与 MVI:它们各自解决了什么问题?
  • Hilt 如何构建 ViewModel?
  • 领域层何时才能发挥作用?
  • (高级)如何将大型应用程序拆分成模块?如何防止模块之间产生不良依赖?
  • (高级)设计一个可供其他应用程序嵌入的 SDK 架构。

试试这个: 创建一个直接调用 Retrofit 的 ViewModel。将该调用移到一个仓库中,编写一个伪仓库(fake repository),并在不连接网络的情况下测试 ViewModel。

第六阶段:数据、网络和离线

实际应用中,数据大多存在延迟、缺失或过时的问题。而真正有趣的问题则始于网络故障。

必知

  • HTTP、REST、状态码和 API 协议
  • 使用 kotlinx.serialization 或 Moshi 处理 JSON
  • Retrofit;OkHttp 拦截器、超时和缓存
  • Room:实体、DAO、Flow 查询、关系、事务和数据库迁移(在不丢失用户数据的情况下更改表结构 schema)
  • DataStore(以及旧版本代码中的 SharedPreferences)
  • 离线优先:将本地数据库作为数据源
  • Paging 3
  • 用于同步的 WorkManager
  • 错误、重试、退避和超时
  • 身份验证令牌和安全令牌刷新
  • 图片加载和缓存

深入了解

  • WebSocket 和 FCM 推送
  • GraphQL 和 Ktor 客户端
  • SQL 索引和查询性能
  • 解决在两台设备上编辑的数据冲突
  • 静态数据加密

从哪里开始: 数据层指南 和 离线优先指南。

面试问题

  • 你的应用在离线状态下显示什么?
  • 如何安全地编写 Room 迁移?
  • 由于令牌过期,五个请求同时失败。如何只刷新一次令牌?
  • 如何构建即时搜索功能,而无需在每次按键时都发送请求?
  • (高级)设计一个离线使用数天的应用的同步功能。

试试这个: 将列表页面设置为只从 Room 读取,并在后台通过网络刷新。开启飞行模式。页面内容还能正常显示吗?

第七阶段:测试和代码质量

曾经在你的手机上运行过的功能并不意味着它已经完成。谷歌的建议是优先使用 fake 而非 mock,并测试 ViewModel、数据层、导航和性能。关键在于选择测试内容,而不是编写更多的测试用例。

必知

  • 本地测试与插桩测试,以及各自的适用场景
  • JUnit 和清晰的断言
  • Fakes 与 Mocks
  • ViewModel 和仓库测试
  • 协程测试:runTest、测试调度器、替换 Dispatchers.Main
  • Flow 测试
  • 使用内存数据库的 Room 测试
  • 带有语义的 Compose UI 测试;Espresso 用于 View 代码
  • Lint 和静态分析
  • 持续集成 (CI),在每个拉取请求上运行测试

深入了解

  • 屏幕截图测试
  • Robolectric
  • 代码覆盖率工具,以及为什么覆盖率并非最终目标
  • Gradle 管理的设备和设备集群
  • 查找和修复不稳定的测试

从哪里开始: Android 测试基础知识。

面试问题

  • Fake 还是 mock:你更喜欢哪一个?为什么?
  • 如何测试使用 viewModelScope 的 ViewModel?
  • 在一个新功能中,你会先测试什么?
  • (高级)你的 UI 测试在持续集成 (CI) 环境中不稳定。你会首先检查什么?

**试试这个:**故意破坏某个功能,例如交换映射器中的两行代码。是否有任何测试失败?如果没有,请编写一个会失败的测试。

第八阶段:生产工程

发布与构建是不同的技能。2027 年,它还包括几年前不存在的规则:16 KB 页面支持、年度目标 API 截止日期 和 开发者验证。

必知

  • 调试:Logcat、断点、布局检查器、数据库和网络检查器
  • 内存:性能分析器、堆转储、内存泄漏、LeakCanary
  • ANR:原因以及如何解读跟踪信息
  • 渲染:卡顿、帧计时、JankStats
  • 启动:冷启动、温启动和热启动
  • Baseline Profiles(基准配置文件) 和 Macrobenchmark
  • R8、keep 规则和应用大小
  • 安全:密钥库、网络安全配置、Play Integrity、不在 APK 中包含密钥
  • 发布:签名、App Bundles、Play 测试轨道、分阶段发布、应用内更新
  • 监控:崩溃报告(例如 Firebase Crashlytics)、远程配置和 Android Vitals
  • 平台规则:目标 SDK 升级、16 KB 页面、开发者验证

深入了解

  • Perfetto 和自定义跟踪部分;日志记录和网络检查工具,例如 Timber 和 Chucker
  • 原生崩溃
  • Gradle 构建速度和配置缓存
  • 功能开关和安全发布
  • 隐私审查和 Play 数据安全表单

从哪里开始: 性能概述。

这是我最关心的方面,因为“应用运行缓慢”并不是一个可以修复的错误报告。你需要先有数据支持。

面试问题

  • 什么原因会导致 ANR(应用程序无响应)?如何从生产环境中调试 ANR?
  • 如何查找内存泄漏?
  • Baseline Profiles 如何加快启动速度?
  • (高级)版本发布后崩溃率上升。讲一下接下来一小时你会怎么做。
  • (高级)如何将冷启动时间缩短一半?如何证明这一点?

试试这个方法: 使用 Macrobenchmark 测量冷启动性能。添加一个基准配置文件。再次测量并记下两次测量的结果。

第九阶段:系统设计和高级技能

这时,你不再需要问“我该如何构建这个页面”,而是应该问“哪些环节会出问题,以及谁来负责”。系统设计并非简单的方框和箭头,而是包含需求、数据模型、故障案例以及你能解释清楚的权衡取舍。

必知

  • 明确需求:用户数量、规模、离线需求以及最重要的事项
  • 应用与后端之间的 API 设计
  • 数据模型和缓存策略
  • 离线同步和冲突处理
  • 分页和图片加载管线
  • 实时更新:WebSocket、FCM、轮询及其优缺点
  • 后台同步、重试机制和故障处理
  • 身份验证和安全
  • 日志记录、指标和监控
  • 模块边界和团队归属

常见设计问题

聊天应用、新闻或社交动态、照片库、离线笔记或待办事项、带筛选器的购物车、地图或行程跟踪、视频播放器、文件上传、LRU 缓存、其他应用的 SDK。

深入了解

  • Android 内部机制:ART 和垃圾回收、Looper 和 MessageQueue、渲染管线(Choreographer、RenderThread、vsync)
  • 主导大型代码库的迁移
  • 编写设计文档和指导

从哪里开始: 应用程序架构指南 和 模块化指南。

面试问题

  • 设计一款可离线使用的聊天应用。
  • 设计一个类似 Instagram 的图片密集型信息流。
  • 设计一个 LRU 缓存。
  • (高级)设计一个可供其他团队嵌入的 SDK。它的 API 是什么样的?如何进行版本控制?
  • (高级)如何安全地向数百万用户推出一项风险较高的变更?

试试这个: 在纸上设计一个离线优先的聊天应用。然后列出三种可能失败的情况,例如消息发送重复、消息顺序错误或进程终止时消息丢失,并说明你的设计是如何处理每种情况的。

人工智能在安卓发展路线图中扮演什么角色?

人工智能不是第十阶段。它与每个阶段同时进行,以两种不同的方式:使用人工智能来完成你的工作,以及将人工智能构建到你发布的应用程序中。

A 部分:Android 工程师如何运用人工智能

谷歌现在提供了相应的工具。Android CLI 1.0允许Android Studio、Claude Code或Codex等代理程序创建、构建和部署Android应用。Android技能为代理程序提供谷歌的最佳实践,用于执行自适应UI或测试设置等任务。

必知

  • 为工具提供正确的上下文和明确的限制
  • 分步进行:计划、小幅修改、审查、测试
  • 审查 AI 代码,检查是否存在生命周期、线程、状态和安全方面的漏洞
  • 检查 AI 编写的测试是否会失败,而不仅仅是它们是否通过
  • 哪些代码和数据可以与哪些工具共享
  • 知道何时停止提示并阅读文档或源代码
  • 了解代理和 MCP 服务器如何将工具连接到模型的基本原理

以下是人工智能工具经常编写的代码类型。它可以编译,正常路径运行良好,代码审查结果看起来也很干净:

// Almost right
fun loadProfile() = viewModelScope.launch {
    runCatching { repository.fetchProfile() }
        .onSuccess { _uiState.value = UiState.Data(it) }
        .onFailure {
            crashReporter.log(it)          // also logs normal cancellations
            _uiState.value = UiState.Error
        }
}

// Right
fun loadProfile() = viewModelScope.launch {
    try {
        _uiState.value = UiState.Data(repository.fetchProfile())
    } catch (e: CancellationException) {
        throw e                            // let cancellation finish
    } catch (e: IOException) {
        crashReporter.log(e)
        _uiState.value = UiState.Error
    }
}

runCatching 会捕获所有 Throwable 异常,包括 CancellationException。当用户离开页面且协程被取消时,第一个版本会将其视为失败。它会记录一个从未发生过的错误,并在协程应该停止之后继续执行代码。Kotlin 文档明确指出:如果捕获了 CancellationException,则需要重新抛出它。

只有学过第三阶段的人才能发现这一点。这就是为什么人工智能让基础知识更有价值,而不是更不重要。

B 部分:将 AI 功能构建到应用程序中

谷歌的选择人工智能解决方案指南以一条规则开头:使用能够完成工作的最简单的模型和工具。

选项适用场景注意事项
设备端(Gemini Nano、ML Kit GenAI API、Prompt API)注重隐私,支持离线使用,不收取请求费用仅部分设备支持;最适合短文本任务
云端(Firebase AI Logic、你自己的后端)适用于大型模型、图像和视频输入、复杂任务网络、延迟、成本、用户数据离开设备
混合模式设备支持时使用设备端,云端作为备选方案两种代码路径可供构建和测试

必知

  • 为功能选择设备端、云端或混合部署
  • 调用模型并将结果流式传输到 Compose 状态
  • 结构化输出并安全地解析
  • 超时、重试、速率限制和错误处理
  • 成本和延迟预算
  • 将 API 密钥保存在设备之外,确保用户数据安全
  • 检查模型输出并在用户界面中处理错误答案
  • AI 友好型用户体验:显示进度,允许用户更正结果
  • AppFunctions,以便设备端代理可以使用你应用的功能
  • 经典 ML Kit,适用于不需要大型模型的视觉和文本任务

**深入了解:**嵌入和检索、使用测试集评估模型输出、构建代理。

列表上的每一项都是一个阶段 3、6、7 或 8 的技能,中间都有一个模型。人工智能功能并不会取代路线图,它们只是对路线图的测试。

人工智能面试题

  • 审查这段由 AI 生成的 ViewModel 并找出其中的错误。
  • 如何在合并 AI 生成的代码之前进行检查?
  • 此功能应该部署在设备端还是云端?为什么?
  • 如何防止模型调用泄露用户数据或 API 密钥?
  • 什么是 MCP 服务器?它如何将工具连接到模型?

现在 Android 面试是什么样的?

根据开发者在 2026 年公开分享的近期 Android 面试经历(从 SDE-1 到 SDE-2),一些模式尤为突出。这些是个人故事,而非调查,但它们都指向同一个方向:

  1. 编程题依然会出现。 大多数面试都包含数据结构与算法(DSA)环节(例如滑动窗口、双指针、哈希表)。有些面试则要求完成一个小型协程任务。Android 开发经验不允许你跳过这些环节。
  2. Android 面试注重深度而非广度。 ViewModel 的内部机制以及配置更改后的状态保持反复出现。协程也是如此。面试官会问“它是如何工作的”和“如果……会发生什么”,而不是“它是什么”。
  3. 设计环节很早就开始了。 即使是 SDE-1 级别的面试也可能包含设计环节。主题包括图像加载库、分析 SDK、无限图像网格和购物应用。
  4. 一些公司会增加机器编码环节。 你需要在 45 到 60 分钟内现场构建一个小型可运行的应用,或者将其作为居家作业完成。
  5. 人工智能已进入面试。 它会成为一个话题(你使用哪些工具、什么是 MCP、你在工作中如何使用人工智能)。据报道,2026 年 5 月,谷歌也进行了一轮试点,让初级和中级候选人使用 Gemini 阅读、调试和改进现有代码。

如何为每一轮面试做好准备

  • 编码(数据结构与算法) 测试:在时间压力下解决问题。准备:从第一个月开始,每周练习几个中等难度的问题。在编写代码之前,大声解释你的解题思路。
  • Android 和 Kotlin 深度解析 测试:阶段 1 至 5。准备:使用每个阶段的面试题。大声回答,然后对照文档检查自己的答案。
  • 机器编码 测试:快速编写简洁、可运行的代码。准备:练习在 60 分钟内构建一个列表、详情和搜索应用。准备一个你熟悉的项目模板。
  • 移动系统设计 测试:阶段 6 至 9。准备:练习常见的设计问题:首先是需求,然后是数据、API、缓存、离线模式和故障处理。
  • AI 辅助编码(如有提供) 测试:阅读代码,检查 AI 输出。准备:练习使用 AI 修复你未编写的代码中的 bug,并解释你接受的每一个更改。
  • 招聘经理和行为测试。 测试内容:责任心和判断力。准备:准备四个真实案例:一个棘手的bug、一次分歧、一个错误、一件你主导过的事情。

面试中会被问到什么问题取决于公司和你的级别。不要计较你记住了多少问题,而要计较你能解释、构建并应对“如果……会怎样”的各种假设的答案数量。

你以后还能学到什么?

一份把所有事情都同等重要的路线图对任何人都没有帮助。这些知识只有在你的产品、团队或下一个职位需要时才值得学习。

  • Kotlin 多平台和 Compose 多平台。 JetBrains 于 2025 年 5 月发布了 iOS 版 Compose Multiplatform 稳定版,Kotlin 多平台是 Kotlin 路线图的重点发展方向。这是一项强大的技能,但它建立在阶段 1 到 7 的基础之上。建议在完成这些阶段之后学习,或者在团队共享代码时学习。
  • XML 视图、Fragment 和 RxJava。 许多生产环境应用仍然使用它们,面试中也经常会问到 Fragment 的生命周期。学习足够的知识以便维护和迁移它们。对于新代码,建议优先学习 Compose、协程和 Flow。
  • 专用 API。 蓝牙、摄像头、媒体、位置、健康、Wear OS、电视、汽车和 XR。当产品需要时,要深入了解这些知识。但每个人都应该掌握隐私和权限的基础知识。

规则很简单:先掌握基本原理,然后根据产品的特性深入研究。

根据你的经验,你应该从哪里开始?

  • Android 新手(0-1 年经验) 从第一阶段开始,按顺序学习。谷歌的 Android Basics with Compose 课程很好地涵盖了前几个阶段。尽早开始编写代码练习题。暂时不要接触 AI 功能或 KMP。
  • 在职 Android 开发者(1–4 年经验) 用“达标标准”一列来测试自己。第 2、3 和 7 阶段最容易在发布功能的同时被跳过:进程终止、取消和能够捕获真实 bug 的测试。先检查这些,然后再补充系统设计。
  • 资深开发者(5 年以上经验) 第八和第九阶段就是你的工作。把两条 AI 路线都补上,并确保你仍然能够脱稿回答第 2 和第 3 阶段的面试题,因为你要负责审查所有人用 AI 写出的代码。

应该开发多个小型应用程序还是一个真正的项目?

一个项目,经过逐步改进,可以教会你开发十多个教程应用。它还能让你在面试中拥有一些真正可以谈论的内容。

一个好的路线图项目应具备以下要素:

  • 三到五个 Compose 页面
  • 一个远程 API 加上 Room,支持离线行为
  • 每个页面对应一个 ViewModel、一个仓库和一个 uiState
  • 加载状态、错误状态、空状态和数据状态
  • 单元测试、一些 UI 测试和持续集成 (CI)
  • 一个你测量并修复的性能问题
  • 一个包含架构图和你所做的决策的 README 文件

系统稳定后,添加一项能够解决用户实际问题的 AI 功能,例如搜索或摘要。这一项功能就会涉及流式输出、错误处理、成本、隐私和测试等多个方面。务必最后添加,而不是最先添加。

这需要多长时间?一个为期 6 个月的计划示例

如果你已经具备编程能力,以下是一个每周投入约 12 至 15 小时专注学习的示例计划。如果每周投入 8 至 10 小时,则预计需要近 9 个月的时间。如果你已经通过了任何阶段的考核,请跳过该阶段。

  1. 第一个月: Kotlin 和数据结构与算法基础,Git 和 Gradle
  2. 第二个月: Android 平台,生命周期和进程终止
  3. 第三个月: 协程,Flow 和 Compose UI
  4. 第四个月: 架构,数据和离线功能
  5. 第五个月: 测试,性能优化和发布
  6. 第六个月: 系统设计,项目优化和模拟面试

有三件事贯穿这六个月:每周几个编程题、两个 AI 学习方向以及你的一个项目。

我如何在公开场合遵循这份路线图

我开发安卓应用已经超过六年了。我仍然认为产品路线图不是一个一劳永逸的东西,而是一个需要不断审视和完善的过程。

在工作中,我开发了一个提醒功能,它会每隔几分钟提醒用户,直到他们打开紧急消息为止。最简单的版本是在应用内使用定时器,但一旦 Android 系统终止进程,定时器就会停止工作,而且 Doze 模式本身也会延迟定时器的运行。最终有效的解决方案是将重复循环交给 WorkManager 处理,并将当前消息的 ID 保存到磁盘而不是内存中。进程终止、Doze 模式和后台限制属于第二阶段的面试主题,而正是从这个功能开始,这些概念才不再仅仅是面试理论。

所以我现在又要经历一遍这些步骤,这次是在生产环境层面:阅读文档,构建一个小示例,找出问题所在,然后凭记忆解释原因。人工智能在每个步骤都提供了帮助,但它并不能取代测试或检查。

文章会发布在博客上,视频会发布在YouTube。我会随着安卓系统的变化不断更新这份路线图。

常见问题解答

人工智能会取代安卓开发者吗? 我认为目前的证据并不指向这一点。人工智能工具确实编写了更多代码,但更多开发者对它们的准确性持怀疑态度(46% 对 33%)。最终,仍然需要有人来决定开发什么,验证其在真实设备上的运行情况,并负责其在生产环境中的部署。一些面试也开始朝着这个方向发展:从编写代码转向阅读、检查和修复代码。

我需要学习 Kotlin Multiplatform 才能找到 Android 开发工作吗? 对于大多数原生 Android 开发职位来说,不需要。当团队需要与 iOS 或 Web 团队共享代码时,学习 Kotlin Multiplatform 会有帮助。建议在掌握 Kotlin、协程、架构和测试等基础知识后再学习 Kotlin Multiplatform,因为 Kotlin Multiplatform 是建立在这些基础之上的。

Android 开发人员真的需要数据结构与算法 (DSA) 吗? 通常来说,答案是肯定的。即使是 SDE-2 级别的 Android 面试,编程环节仍然很常见。DSA 对日常工作也很有帮助:例如选择合适的集合、保持列表快速更新以及优化缓存大小。建议每周练习一点,而不是在面试前临时抱佛脚。

先打好基础,再深入钻研

没有哪一种技术栈能保证你在 2027 年就能获得 Android 开发职业。但顺序很清晰:Kotlin、平台、并发、Compose、架构、数据、测试、生产环境,最后是系统设计。人工智能贯穿始终,既是工具也是功能。面试会考察这条路径,外加编码问题和设计能力。

目标不是学习每一种工具。

目的是了解问题,构建有效的产品,并随着 Android 的变化而不断进步。

你现在正在做哪个阶段的工作,而你一直拖延的是哪个阶段?

原文发表于 https://imayankkumar.com,日期为 2026 年 10 月 30 日。

欢迎搜索并关注 公众号「稀有猿诉」 获取更多的优质文章!

保护原创,请勿转载!