当前位置:首页 > 行业动态 > 正文

安卓中存储路径详解

安卓存储路径分内部(/data含系统分区与应用数据)、外部(/sdcard/SD卡存媒体文件)、应用私有目录(/data/data/包名)、缓存区(/cache)及共享存储(/Pictures等),Android 10后需作用域存储权限访问 外部

安卓存储体系

安卓系统采用分层存储设计,主要分为内部存储(设备内置闪存)和外部存储(可扩展存储介质),不同存储区域对应不同的用途和访问权限,具体路径根据系统版本和厂商定制可能略有差异。


内部存储路径详解

路径 说明 访问权限
/system 系统核心分区,含Android操作系统核心文件、预装应用 仅Root权限可读写
/system/app 系统应用安装目录 同上
/system/priv-app 厂商预装特权应用目录 同上
/data 用户数据分区,含应用安装目录和数据库 需签名权限或Root权限
/data/data/<包名> 单个应用的私有数据目录(数据库、SharedPreferences等) 仅限本应用访问
/data/app 用户安装的应用APK存储目录(含系统更新后的应用) 同上
/data/user/0 首个用户的数据目录(多用户场景) 同上
/cache 系统缓存目录(如Dex优化文件) 需高级权限

外部存储路径详解

路径 说明
/storage/emulated/0 虚拟外部存储主目录(Android 4.4+) 兼容旧版SD卡路径
/sdcard 传统SD卡根目录(Android 4.4以下) 逐渐被废弃
环境变量 EXTERNAL_STORAGE 指向当前默认外部存储路径(可能为/storage/xxx/mnt/sdcard

公共数据目录

子目录 用途
DCIM 相机拍摄图片/视频
Pictures 第三方应用保存的图片
Movies 第三方视频文件
Download 浏览器/应用下载的文件
Music 音乐文件
Documents 文档类文件
Android/data/<包名>/ 应用专属外部存储目录(如缓存、媒体文件)
Android/obb/<包名>/ 应用扩展资源包目录

特殊存储路径

类型 路径 特性
应用私有目录 context.getFilesDir()
context.getCacheDir()
仅限本应用访问,无需申请权限
应用外部文件 context.getExternalFilesDir(String type) 存储在应用专属外部目录(如/storage/emulated/0/Android/data/com.example/files
系统临时目录 /data/local/tmp 用于存储临时文件(如ADB推送文件)

存储权限与访问规则

  1. 内部存储

    安卓中存储路径详解

    • 应用默认可读写自身数据目录(/data/data/包名
    • 访问其他应用数据需声明android:sharedUserId并获SELinux策略允许
  2. 外部存储

    • Scoped Storage(Android 10+)
      • 应用默认只能访问自己的外部存储目录
      • 访问公共目录需通过MediaStore API或请求MANAGE_EXTERNAL_STORAGE权限
    • 传统存储模型(Android 9-)
      • 申请READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE可访问全部公共路径

常见问题与解答

问题1:Android 10+如何访问公共图片目录?

解答
需使用MediaStore API操作媒体文件,

安卓中存储路径详解

ContentResolver resolver = getContentResolver();
// 查询DCIM目录图片
Uri collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
Cursor cursor = resolver.query(collection, null, null, null);

直接通过文件路径访问会因Scoped Storage限制导致异常。

问题2:如何判断设备是否支持可扩展存储?

解答
可通过Context.getExternalFilesDir(null)检测返回值:

安卓中存储路径详解

  • 若返回nullgetExternalStorageState().equals(Environment.MEDIA_MOUNTED)false,则无可用外部存储
  • 也可监听ACTION_POWER_CONNECTED广播判断SD卡插入