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

安卓中存储路径详解

安卓存储路径分内部(/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. 内部存储

    安卓中存储路径详解  第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卡插入