KP-1.1 Android 是什么
阅读目标:建立对 Android 的整体认知,理解它不是"一个 SDK",而是一整套平台、运行时、系统服务、应用模型和生态体系。
1. 这是什么
Android 本质上不是单纯的"手机开发框架",而是一套面向多种设备形态的操作系统平台。
它包含:
- 底层的 Linux Kernel
- 面向硬件的 HAL
- 一批 Native Libraries
- Android Runtime
- Java/Kotlin 可调用的 Framework API
- 系统应用和系统服务
- 面向开发者的 SDK、Jetpack、构建工具和发布体系
站在开发者视角,Android 是你写 App 的平台。
站在系统视角,Android 是一套把硬件能力、系统能力、应用模型和生态分发结合起来的完整软件栈。
站在商业视角,Android 是一个开放生态,涵盖手机、平板、折叠屏、电视、手表、车机、XR、ChromeOS 等多类设备。
所以"Android 是什么"这个问题,不能只回答"一个移动操作系统"。更准确的说法是:
Android 是一套基于 Linux 内核构建、面向多设备形态、支持应用沙箱、组件化应用模型、系统服务分层和开放生态分发的操作系统平台。
2. 为什么重要
如果一开始对 Android 的认识过窄,后面学到很多知识点时会缺乏统一坐标系。
例如:
- 你学
Activity,其实是在学 Android 的组件模型。 - 你学
Binder,其实是在学 Android 的系统服务通信机制。 - 你学
Room、WorkManager、ViewModel,其实是在学 Android 官方推荐的应用架构解法。 - 你学
JNI、HAL、AOSP,其实是在继续沿着 Android 的平台分层往下走。
这篇文章的作用,是先把 Android 的整体地图立起来。
后面无论学 UI、架构、性能、系统原理还是 AOSP,都能知道自己处在哪一层。
3. 核心概念与术语
理解 Android,先把这些术语分清:
3.1 Android 平台
指完整操作系统平台,不只是应用开发工具包。
3.2 SDK
指应用开发使用的软件开发工具包,包括:
- API
- build tools
- platform tools
- emulator
- 调试与打包相关工具
SDK 只是 Android 的开发入口,不等于 Android 本身。
3.3 AOSP
Android Open Source Project,即 Android 开源项目。
它提供 Android 平台的开源主体代码,包括 framework、system、部分 apps、build system 等。
要注意:
- AOSP 不等于你买到的所有 Android 手机系统
- 商业设备通常还会叠加厂商定制、驱动、GMS、运营策略和预装内容
3.4 Framework
Android Framework 指开发者最常接触的上层 API 能力,例如:
- Activity
- Service
- BroadcastReceiver
- ContentProvider
- View
- Window
- Notification
- PackageManager
- LocationManager
Framework 负责把系统能力封装成应用可调用的 API。
3.5 System Service
Framework 背后很多能力并不是直接由 App 完成,而是由系统服务提供,例如:
- ActivityManagerService
- PackageManagerService
- WindowManagerService
- NotificationManagerService
- PowerManagerService
App 往往通过 Framework API 间接访问这些系统服务。
3.6 Android Runtime
Android Runtime,常见缩写是 ART。
它负责:
- 应用代码运行
- 类加载
- 垃圾回收
- JIT / AOT 编译相关能力
- Java/Kotlin 字节码执行环境支撑
3.7 HAL
Hardware Abstraction Layer,硬件抽象层。
它的作用是把上层系统服务和底层硬件驱动解耦。
例如:
- Camera HAL
- Audio HAL
- Sensors HAL
- GNSS HAL
- Bluetooth HAL
没有 HAL,上层 Framework 就要直接面对各厂商硬件差异,平台几乎无法规模化维护。
3.8 API Level
API Level 是 Android 版本能力的编程接口标识。
开发中经常会同时看到:
minSdktargetSdkcompileSdk
这三个值都和平台版本能力有关,但含义不同,后续会在专门文章里详细展开。
3.9 应用沙箱
Android 默认让每个应用运行在独立 Linux UID 和独立进程/数据空间下。
这叫应用沙箱模型。
它直接影响:
- 权限模型
- 文件访问
- 组件暴露
- 数据安全
- 进程隔离
4. Android 的定位:它到底解决什么问题
任何平台都有自己的核心问题域。
Android 主要解决的是以下几类问题:
4.1 统一多厂商硬件差异
不同设备有不同的:
- CPU
- GPU
- 传感器
- 摄像头
- 音频芯片
- 屏幕
- 通信模组
Android 通过 Kernel、Driver、HAL、Framework 的分层,把硬件差异抽象成一致的系统能力。
4.2 提供稳定的应用模型
Android 不采用"App 自己完全掌控一切"的模式,而是规定了一套组件模型:
- Activity
- Service
- BroadcastReceiver
- ContentProvider
这样系统可以统一调度应用生命周期、进程优先级、后台行为和资源分配。
4.3 在资源受限设备上运行复杂应用
移动设备长期面对:
- 内存有限
- 电量有限
- 后台限制严格
- 热量约束明显
- 网络环境复杂
Android 的很多设计都围绕这些限制展开,比如:
- 生命周期回收
- 后台启动限制
- Doze
- App Standby
- WorkManager
- 前台服务约束
4.4 支持开放生态分发
Android 不是单一设备厂商私有系统,而是开放生态平台。
这意味着它必须同时考虑:
- 开源
- 厂商定制
- 第三方应用分发
- 多屏形态适配
- 兼容性测试
- 安全与隐私治理
5. Android 的系统分层
从上到下看,Android 可以粗略分成这几层:
- App Layer
- Application Framework
- Android Runtime + Native Libraries
- HAL
- Linux Kernel
下面逐层理解。
5.1 App Layer
最上层是应用层,包括:
- 系统应用
- 三方应用
- 企业应用
- 预装应用
你平时写的 App 就在这一层。
这一层通过 Framework API 使用系统能力,而不是直接操作驱动。
5.2 Application Framework
这是 Android 对应用开发者最关键的一层。
它向上提供统一 API,向下连接系统服务。
常见能力包括:
- Activity 管理
- Window 管理
- Notification
- Package 管理
- Location
- Telephony
- Media
- Sensors
- Input
应用开发者最常写的代码,大部分都发生在这一层之上。
5.3 Android Runtime 与 Native Libraries
这里包含两部分:
Android Runtime
负责运行 Java/Kotlin 层代码。
典型职责:
- 代码执行
- 垃圾回收
- 编译优化
- 类加载
- 运行时管理
Native Libraries
包含很多底层 C/C++ 库,例如图形、媒体、数据库、网络、安全相关能力。
应用虽然不直接操作大部分 Native Library,但系统大量能力都建立在这一层之上。
5.4 HAL
HAL 位于系统服务和具体硬件之间,是典型的抽象层。
其核心价值是:
- 上层接口相对稳定
- 下层可由不同厂商分别实现
- 降低 framework 和硬件耦合
例如,同样是打开摄像头,不同手机内部驱动完全不同,但上层应用调用 Camera API 时,希望看到的是统一行为。
5.5 Linux Kernel
Android 底层建立在 Linux Kernel 之上。
内核负责:
- 进程调度
- 内存管理
- 驱动管理
- 文件系统
- 网络协议栈
- 电源管理
- 安全隔离基础
Android 不是"在 JVM 上跑出来的框架",而是真正运行在 Linux 内核之上的操作系统。
6. Android 的运行模型
理解 Android,必须理解它"不是桌面程序模型"。
6.1 不是单纯的 main 函数程序
在很多语言环境里,程序从 main() 开始,由开发者自己控制整个生命周期。
Android 不一样。
Android 应用通常由系统驱动启动、切换、暂停、恢复、销毁。
例如:
- 进入页面时系统调用
onCreate - 页面切到后台时系统调用
onStop - 配置变化时系统可能重建组件
- 资源不足时系统可能杀死进程
所以 Android 开发本质上是"响应系统调度"的开发模式。
6.2 组件驱动而不是页面驱动
很多初学者以为 Android 开发就是写页面。
实际上 Android 的基本运行单元是组件。
组件包括:
- Activity
- Service
- BroadcastReceiver
- ContentProvider
页面只是其中一部分。
6.3 进程可被系统回收
Android 应用进程不是绝对常驻的。
系统会根据:
- 前后台状态
- 可见性
- 内存压力
- 后台限制
决定是否回收进程。
这直接要求开发者:
- 做好状态恢复
- 不依赖进程常驻
- 不滥用全局单例
- 不把未持久化的重要数据只放内存
6.4 受权限和系统策略约束
Android 并不是"只要代码能写出来就能执行"。
平台会从多个维度约束 App:
- 运行时权限
- 后台启动限制
- 前台服务限制
- 文件访问限制
- 包可见性限制
- 隐私与传感器访问限制
这也是 Android 和很多普通客户端框架的根本区别之一。
7. Android 应用是怎么被组织起来的
7.1 安装单元
Android 应用的发布形态常见有:
- APK
- AAB
其中:
- APK 更像安装包结果
- AAB 更像面向应用商店分发的构建产物
7.2 代码与资源分离
Android 应用不是只有代码,还包含大量资源:
- 布局
- 图片
- 文本
- 主题
- 字体
- 动画
- 音视频
- 多语言资源
这使得 Android 开发天然带有"代码 + 资源 + 清单 + 构建配置"的工程特点。
7.3 Manifest 是应用声明中心
AndroidManifest.xml 用来声明应用的重要元信息,例如:
- 包名
- 组件
- 权限
- intent-filter
- provider authority
- 进程
- exported
很多 Android 行为不是只靠代码决定,而是由清单声明 + 运行时代码共同决定。
7.4 组件之间靠 Intent、Binder、Provider 等机制协作
Android 应用内部和跨应用交互常见依赖:
- Intent
- Binder
- ContentProvider
- Broadcast
因此 Android 不是一个只有函数调用的世界,而是一个强调边界、消息、声明和系统调度的世界。
8. Android 和 Java / Kotlin / JVM 的关系
很多人会混淆这几个概念。
8.1 Android 不等于 Java
早期 Android 大量使用 Java 编写应用代码,但 Android 本身不是 Java 平台的简单移植版。
更准确地说:
- Android 应用常用 Java/Kotlin 编写
- Android 有自己的运行时体系
- Android 有自己的 framework API
- Android 底层大量是 C/C++
8.2 Kotlin 是当前 Android 主流语言
在现代 Android 开发中,Kotlin 已经是主流首选语言。
原因包括:
- null safety
- 协程支持
- 更现代的语言能力
- 与 Jetpack 和 Compose 的配合更自然
8.3 Android 不是标准桌面 JVM 程序
虽然你会写 Java/Kotlin 代码,但 Android 运行模型、构建链路、打包方式、运行时和桌面 JVM 程序都不完全相同。
例如:
- 字节码处理方式不同
- 打包结构不同
- 运行时生命周期不同
- 权限与沙箱模型不同
- 系统 API 来源不同
9. Android 版本、API Level 与兼容性
Android 是一个强兼容平台,但兼容不是"什么都一样"。
9.1 为什么有 API Level
平台持续演进时:
- API 会新增
- 行为会调整
- 权限模型会收紧
- 后台限制会变化
因此平台需要一个可以被构建系统和代码识别的版本能力标识,这就是 API Level。
9.2 开发中为什么总提兼容
因为 Android 生态天然存在:
- 设备型号多
- 系统版本多
- 厂商 ROM 差异大
- 屏幕尺寸多
- 硬件能力差异大
这决定了 Android 工程从一开始就必须考虑兼容与适配,而不是后期补救。
9.3 三个常见版本参数
后续你会频繁遇到:
minSdktargetSdkcompileSdk
先只记住结论:
minSdk决定最低支持范围targetSdk决定你对新平台行为变更的声明目标compileSdk决定你编译时能看到哪些 API
后面会在专门文章里详细展开它们的差异和踩坑点。
10. Android 的生态特征
Android 的很多复杂度,来自它是开放生态。
10.1 设备形态非常多
不只有手机,还包括:
- 平板
- 折叠屏
- 大屏设备
- 手表
- TV
- 车机
- XR
- ChromeOS 设备
10.2 厂商参与度高
厂商会在 Android 基础上做大量定制,例如:
- SystemUI
- 设置应用
- 通知策略
- 电池策略
- 多任务策略
- 自启动限制
- 权限弹窗策略
这也是为什么 Android 开发中"厂商兼容性"一直是现实问题。
10.3 平台开放,但治理越来越严格
Android 早期相对开放,但近年在以下方面持续收紧:
- 隐私
- 权限
- 后台能力
- 安装来源
- 文件访问
- 通知
- 设备标识访问
这不是平台变难用了,而是平台在开放生态和用户安全之间重新平衡。
11. 现代 Android 开发到底包含哪些部分
如果今天说"做 Android 开发",通常至少包含以下能力域:
11.1 应用基础
- 四大组件
- 生命周期
- Intent
- Manifest
- 权限
11.2 UI
- View System
- Jetpack Compose
- 动画
- 交互
- 无障碍
11.3 架构
- ViewModel
- Repository
- UDF
- 协程
- Flow
- 模块化
11.4 数据与网络
- Room
- DataStore
- 文件存储
- Retrofit / OkHttp
- 缓存
11.5 工程化
- Gradle
- AGP
- CI/CD
- 测试
- Lint
- 代码规范
11.6 质量
- 性能
- 稳定性
- 安全
- 兼容性
- 发布与回滚
11.7 平台进阶
- Binder
- ART
- 启动流程
- AOSP
- NDK / JNI
- HAL
- Kernel
所以 Android 绝不是"写几个页面"的技术栈,它是一个层次非常深的平台工程体系。
12. 典型学习误区
12.1 误区一:学会控件就是学会 Android
错。
会写界面只代表你接触了最表层。
真正的 Android 能力还包括:
- 生命周期
- 状态恢复
- 后台约束
- 权限模型
- 架构设计
- 性能与稳定性
12.2 误区二:Android 就是 Java
错。
Java 或 Kotlin 只是开发语言层。
Android 的关键复杂度在平台模型,而不只在语言语法。
12.3 误区三:能跑起来就算掌握
错。
Android 项目很多问题都不是"能不能跑",而是:
- 能否适配多设备
- 是否生命周期安全
- 是否抗系统回收
- 是否性能达标
- 是否满足隐私合规
12.4 误区四:只学 Jetpack 就够了
也不对。
Jetpack 很重要,但如果你不理解 Android 原生系统机制,很多问题只能停留在"会调库"的层面。
12.5 误区五:只看源码就能学会 Android
也不对。
源码重要,但前提是你先有平台心智模型。
否则源码会变成大量零散类名和调用链,难以建立真正理解。
13. 工程与业务视角下,为什么 Android 难
Android 的难点不是单点 API,而是多维约束叠加:
- 设备碎片化
- 生命周期复杂
- 后台限制严格
- 版本兼容复杂
- UI 体系新旧并存
- 系统行为受 ROM 影响
- 性能和电量必须权衡
- 还要考虑安全、隐私、合规、上架政策
这意味着 Android 工程师不能只靠"功能实现"定义能力,必须同时具备:
- 平台理解
- 工程治理
- 问题排查
- 长期维护思维
14. 调试与观察 Android 平台的基本方式
作为"Android 是什么"的入门认知,至少要知道平台不是黑箱。
14.1 常见命令
bash
adb devices
adb shell getprop ro.build.version.release
adb shell getprop ro.build.version.sdk
adb shell pm list packages
adb shell dumpsys activity
adb shell dumpsys package <package_name>
adb logcat
这些命令分别帮助你观察:
- 当前连接设备
- 系统版本
- API Level
- 已安装包
- Activity 任务栈与进程状态
- 包信息
- 实时日志
14.2 这说明了什么
说明 Android 是一个"可被观察、可被调试、可被系统化分析"的平台。
学习 Android,不应只停留在 IDE 页面和代码编辑器内部。
15. 面试里应该怎么回答"Android 是什么"
如果面试官问这个问题,太短会显得浅,太散会显得乱。
比较稳的回答方式如下:
Android 是一套基于 Linux Kernel 的操作系统平台,不只是移动端 SDK。它通过 HAL、Native Libraries、ART、Framework 和 System Service 形成完整分层,向上提供统一的应用开发模型,向下适配不同硬件和厂商实现。对应用开发者来说,核心是组件化模型、生命周期、权限、系统服务和多设备适配;对系统开发者来说,还包括 Binder、Framework、HAL、Kernel、AOSP 和兼容性体系。
如果继续追问,你可以展开:
- 为什么 Android 采用四大组件模型
- 为什么会有生命周期和后台限制
- 为什么开放生态带来碎片化
- 为什么现代 Android 需要重视安全、隐私和兼容性
16. 这一篇学完后,下一步应该接什么
建议顺序:
Android 开发全景Android 开发者能力模型工程结构ContextIntent四大组件
因为只有先理解 Android 是平台,后面学工程结构、组件模型、Context 和系统调度才不会碎片化。
17. 常见问题速答
17.1 Android 是不是 Linux
不是。
更准确地说,Android 是基于 Linux Kernel 构建的操作系统平台。
17.2 Android 是不是 JVM 平台
不完全是。
Android 应用常用 Java/Kotlin 编写,但 Android 有自己的运行时体系、打包方式、组件模型和平台 API。
17.3 Android 是不是只能做手机
不是。
它覆盖手机、平板、TV、Wear、车机、XR、ChromeOS 等多种形态。
17.4 Android 难点到底在哪
不在单个 API,而在平台模型、兼容性、性能、系统约束和工程治理。
18. 官方参考
- Android Developers Overview: https://developer.android.com/get-started/overview
- Android Platform Architecture: https://source.android.com/docs/core/architecture
- Android Releases: https://developer.android.com/about/versions
- Android Security Overview: https://source.android.com/docs/security
19. 这篇文章的结论
Android 不是一个"写页面的 SDK",而是一个完整的操作系统平台。
你后面学到的所有知识点,本质上都可以放回这几个问题里理解:
- 它属于 Android 的哪一层
- 它解决了平台的什么问题
- 它和系统调度、硬件抽象、运行时、生态约束有什么关系
一旦这个总视角建立起来,后续学 Android 就不会只剩下零散 API 和记忆负担。