Android 系统的安装目录结构是一个复杂且分层的体系,它定义了系统文件、应用程序、用户数据以及各种资源的存储位置。理解这些目录对于开发者进行应用开发、系统定制、问题排查,或高级用户进行文件管理都至关重要。与传统的桌面操作系统不同,Android 基于 Linux 内核,并采用了独特的文件系统组织方式,核心在于其分区设计和权限管理。

根目录概览
当通过 ADB Shell 或其他方式访问 Android 设备的根文件系统时,你会看到一系列目录。这些目录大致可以分为以下几类:
核心系统目录: 存放操作系统运行所必需的文件和库。
系统应用和配置目录: 存放预装的系统应用及其数据、系统配置文件等。
用户数据和应用目录: 存放用户安装的应用、应用产生的私有数据、用户媒体文件等。
虚拟文件系统: 提供内核和运行时信息的接口。
关键系统目录详解
以下是 Android 文件系统中一些最重要目录的解析:
| 目录名 | 路径 | 权限 | 主要功能与内容 |
|---|---|---|---|
| /system | /system | 通常只读 (ro) | 存放 Android 系统的核心组件。包含系统应用 (/system/app)、特权应用 (/system/priv-app)、系统库 (/system/lib, /system/lib64)、可执行文件 (/system/bin, /system/xbin)、字体、铃声、配置文件等。此分区在正常启动后通常被挂载为只读,防止系统文件被意外修改。 |
| /vendor | /vendor | 通常只读 (ro) | 存放设备制造商或芯片供应商提供的特定驱动、库、硬件抽象层 (HAL) 实现和预装应用。这是 Project Treble 引入的重要分区,将系统框架 (/system) 与厂商实现 (/vendor) 分离,便于系统更新。 |
| /product | /product | 通常只读 (ro) | 存放与特定产品线或设备型号相关的软件和资源。进一步细化了系统分区的内容。 |
| /data | /data | 读写 (rw) | 这是最重要的用户数据分区。包含用户安装的所有应用 (/data/app)、每个应用私有的数据目录 (/data/data/<package_name>)、应用缓存 (/data/data/<package_name>/cache)、系统设置、账户信息、短信、数据库等。此分区在用户恢复出厂设置时会被清空。 |
| /cache | /cache | 读写 (rw) | 存放系统在运行过程中产生的临时文件和缓存数据。例如 OTA 更新包的下载存放位置。此分区可以在不影响用户数据的情况下被清空(如进入 Recovery 模式清除缓存)。 |
| /persist | /persist | 读写 (rw) | 用于存储需要持久化保留、即使在恢复出厂设置后也不会丢失的数据。例如设备的唯一标识符、某些传感器校准数据等。具体内容由厂商定义。 |
| /dsp | /dsp | 只读 (ro) | 存放数字信号处理器相关的固件文件。 |
| /firmware | /firmware | 只读 (ro) | 存放无线模块 (Wi-Fi, 蓝牙, 基带) 等硬件所需的固件映像文件。 |
| /mnt | /mnt | - | 标准的挂载点目录,用于临时挂载文件系统。例如,物理 SD 卡或 OTG 连接的 U 盘可能会挂载在 /mnt/media_rw 下的某个子目录,然后通过符号链接或其他机制暴露给用户。 |
用户可见的存储目录
对于普通用户和应用开发者,以下目录更为常见:
| 目录名 | 路径 | 访问方式 | 主要功能与内容 |
|---|---|---|---|
| 内部存储 (Internal Storage) | /data/data/<package_name>/ | 仅限应用自身访问 (Context.getFilesDir(), Context.getCacheDir()) | 应用的私有目录,用于存储应用的专属数据、数据库、配置文件、缓存等。其他应用和用户(无 root)无法直接访问。卸载应用时,此目录及其内容会被删除。 |
| 外部存储 - 主目录 (External Storage - Primary) | /storage/emulated/0/ | 需权限 (READ/WRITE_EXTERNAL_STORAGE), 或 Scoped Storage | 设备内置的共享存储空间。用户看到的 DCIM, Pictures, Movies, Music, Download, Documents 等标准目录都位于此。也用于存放应用共享的文件。在 Android 10 及更高版本中,应用访问此区域非媒体文件受到 Scoped Storage 限制。 |
| 外部存储 - 应用专属目录 (External Storage - App-specific) | /storage/emulated/0/Android/data/<package_name>/ | 无需权限 (Context.getExternalFilesDir(), Context.getExternalCacheDir()) | 位于共享存储空间内,但专属于某个应用的目录。用于存储应用特定的媒体文件或需要长期保留的数据(即使应用被卸载,用户可选择保留)。卸载应用时,此目录默认会被删除。 |
| 外部存储 - 公共目录 (External Storage - Public Directories) | /storage/emulated/0/Documents, /DCIM 等 | 需权限 (Scoped Storage 后更严格) | 存放特定类型的媒体或文档文件的公共目录。应用在 Scoped Storage 下需使用系统文件选择器或特定 API 写入这些目录。 |
| SD 卡 (Adoptable Storage) | /storage/XXXX-XXXX/ (或类似) | 类似主外部存储 | 如果设备支持并设置为“内部存储”,则 SD 卡会被加密并格式化为扩展的 /data 分区的一部分,路径可能类似 /storage/emulated/0。如果作为“便携式存储”,则挂载在 /mnt/media_rw 下的特定目录,并通过 /storage/XXXX-XXXX 暴露给应用。 |
/data 与 /sdcard 的区别
用户常混淆 /data 分区和内部存储(常被称作 /sdcard 或显示为“内部存储”)。关键区别在于:
/data 是系统分区,包含所有应用的核心数据和代码,普通用户无权限直接访问。
/sdcard (或 /storage/emulated/0) 是用户数据分区的一部分,作为共享存储空间挂载,用户和应用(有权限)可以直接访问其中的文件。
总结
Android 的安装目录结构是其安全性和多用户支持的基础。/system, /vendor, /product 等分区保证了核心系统的完整性和稳定性,通常为只读。/data 分区则是用户数据和应用程序的核心舞台,具有读写权限。用户直接交互的文件主要位于外部存储的模拟路径下(如 /storage/emulated/0)。随着 Android 版本的演进,特别是 Scoped Storage 的引入,应用对共享存储区域的访问权限管理变得更加严格和精细。理解这些目录及其权限对于有效管理和开发 Android 应用至关重要。