Android存储

Android存储路径

先来看一张大图:

image

内部存储

Environment.getDataDirectory().getParentFile();也就是根目录,一般就是指/data/data目录下的数据,需要root之后可以看见

  1. /data/app

该文件存放着系统中安装的第三方应用apk

Android的应用安装就是将应用安装包拷贝到/data/app目录下面,每个包本质是一个zip压缩文件。为了提升启动效率,Android会将解压的dex提取出来,缓存在/data/dalvik-cache目录下

api 路径
getDataDirectory() /data
getDownloadCacheDirectory() /cache
getRootDirectory() /system
  1. /data/data

该文件夹存放存储包==私有数据==,对于设备中每一个安装的App,系统都会在内部存储空间的 data/data 目录下以应用包名为名字自动创建与之对应的文件夹。用户卸载 App 时,系统自动删除data/data目录下对应包名的文件夹及其内容。该目录下又把存储内容进行了分类:

地址 说明 api
data/data/包名/cache 存放缓存信息 context.getCacheDir()
data/data/包名/database APP数据库信息 context.getDataDir() / context.getDatabasePath(name)
data/data/包名/files 存放APP的文件信息 context.getFilesDir()

外部存储

每个兼容 Android 的设备都支持可用于保存文件的共享“外部存储”。 该存储可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储。 保存到外部存储的文件是全局可读取文件,而且,在计算机上启用 USB 大容量存储以传输文件后,可由用户修改这些文件。

image

  1. 获取外部存储路径及状态
  • Environment.getExternalStorageState()

  • Environment.getExternalStorageDirectory()

  1. 公共目录

Android在外部存储上提供了十个公共目录来存储对应的文件,通过api:Environment.getExternalStoragePublicDirectory(type)来访问

名称 地址
DIRECTORY_MUSIC /storage/emulated/0/Music
DIRECTORY_PODCASTS /storage/emulated/0/Podcasts
DIRECTORY_RINGTONES /storage/emulated/0/Ringtones
DIRECTORY_ALARMS /storage/emulated/0/Alarms
DIRECTORY_NOTIFICATIONS /storage/emulated/0/Notifications
DIRECTORY_PICTURES /storage/emulated/0/Pictures
DIRECTORY_MOVIES /storage/emulated/0/Movies
DIRECTORY_DOWNLOADS /storage/emulated/0/Downloads
DIRECTORY_DCIM /storage/emulated/0/Dcim
DIRECTORY_DOCUMENTS /storage/emulated/0/Documents

3. 私有目录

Android2.2 引入了基于扩展存储器的应用缓存目录,该目录指向大容量的扩展存储器。==与应用的内存私有目录一样,缓存目录会随着应用的卸载一并删除。==
==和内部存储一样,会在 SD 卡的 Android/data ++目录下生成对应包名的文件夹++==

地址 api
/storage/emulated/0/Android/data/应用包名/files context.getExternalFilesDir(type)
/storage/emulated/0/Android/data/应用包名/cache context.getExternalCacheDir()
/storage/emulated/0/Android/obb/应用包名 context.getObbDir()

Android其它目录

/system/app 和 /data/app 的区别

  • /data/app 里软件权限没全开,/system/app 里的软件获取了所有权限
  • /data/app 可以应用卸载,/system/app 只能 root 后删除
  • /data/app 文件夹大小随便,/system/app 文件夹有大小限制
  • 卸载/system/app 目录下的文件并不会增加系统空间,即可用 ROM 空间