Android存储目录

  • 问:三个概念,你弄清楚了吗?
    内存:Memory
    内部存储:InternalStorage
    外部存储:ExternalStorage
  • 答:说到这三个概念,就不得不说一下平时我们选购手机的参数 6G+128G、8G+256G 等,这里的 6G 和 8G 指的是手机内存(手机运行时存储),而 128G 和 256G 指的是手机存储空间(由内部存储的空间和外部存储的空间构成)。PS:所以如果追求手机的运行速度,内存买大一点。可以理解为手机内存是操场,而手机存储空间是教室,要想学生们跑得快自然操场得大一些,教室的大小只决定了可以容纳多少学生。
  1. 你了解 Android 手机的存储目录吗?
  2. 你知道 Android 手机 App 应用数据都存放在哪了吗?
  3. 你知道 Android 手机存储存在的隐私安全问题吗?

那么开始今天的故事。

虚拟世界

Android 存储目录的化身——A 州 M 社区。

众所周知,A 州是一座正在蓬勃发展的城市。M 社区是 A 州引以为傲的设施完备的高档社区(各家各户都是独门独幢),有几户大户人家住在 M 社区,陶钱豹陶家、魏欣魏家、窦银窦家等是其中翘楚。

M社区鸟瞰图

  • M 社区总占地 30 万平方米,公共区域面积大,绿化率高。住宅区是各家各户私有区域(有围墙大门),未经主人允许不得擅自闯入。除此之外,社区设有专门的停车区来实现人车分离,当然停车区也属于私有区域,与住宅绑定。私有区域都有尊贵的户主标识。
  • 除了私有区域,社区还拥有相册公园、音乐游泳馆、图片图书馆等九大公共区域,由物业统一管理,各家各户共享资源。
  • 如果有一户人家搬出社区,物业会对这户人家的私有区域(包括住宅区和停车区)进行打扫,保证不会残留垃圾,给下一户人家良好的居住体验,同时也会保留上一户人家在公共区域所留下的记录和贡献(这是社区的共享资源)。
  • 社区公共区域虽然受物业管辖,但限制不大,各家各户几乎可以自由地使用和享受公共资源,所以公共区域的文明建设就要靠对社区居民的自觉性了。

把目光拉回到现实来。

现实世界

小米 5 真机文件存储目录:

MI5文件存储

附上包含针对开发者的 Android 存储目录 Api 整理:

Android存储目录总结

  • 内部存储根目录:/data

  • 内部存储私有目录根目录:/data/user/0/包名(如 com.taobao.taobao)

  • 内部存储普通文件私有目录:/data/user/0/包名(如 com.taobao.taobao)/files

  • 内部存储缓存文件私有目录:/data/user/0/包名(如 com.taobao.taobao)/cache

  • 外部存储根目录:/storage/emulated/0

  • 外部存储私有目录根目录:/storage/emulated/0/Android/data/包名(如 com.taobao.taobao)

  • 外部存储普通文件私有目录:/storage/emulated/0/Android/data/包名(如 com.taobao.taobao)/files

  • 外部存储缓存文件私有目录:/storage/emulated/0/Android/data/包名(如 com.taobao.taobao)/cache

清理数据的两个选项:

  1. 清理数据:会清理所有私有目录(内部存储私有目录根目录和外部存储私有目录根目录)
  2. 清理缓存:会清理所有缓存文件目录(内部存储缓存文件私有目录和外部存储缓存文件私有目录)

总结

本文基于 Android4.4 及以上系统说明,因为 Android4.4 以下存储目录有细微区别,这里不做探讨。

  1. Android 存储目录主要分为内部存储私有目录外部存储私有目录外部存储公共目录
  2. Android 手机 App 应用的数据中与应用相关的缓存数据等(这些数据会随着应用卸载一起删除)一般存储在外部存储私有目录,在外部存储私有目录不可用的情况下才考虑内部存储私有目录(内部存储空间较少,比较珍贵);Android 手机 App 应用的数据中与应用无关的数据(例如保存的照片,这些数据不会随着应用卸载一起删除)存储在外部存储公共目录或外部存储自定义的其他目录下。
  3. Android 手机存储对外部公共存储部分的限制较少,存在隐私安全隐患。(据说你在“猫西”上搜索耳机商品,它会将这个隐私信息存储到你手机的外部存储,然后你在打开“明日底线”的时候会读取这个隐私信息,给你推送耳机的广告)

思考

造成当前 Android 存储目录使用混乱的局面有多种因素。一是谷歌在 Android系统层面没有杜绝这种情况的发生;二是国内 Android开发者水平良莠不齐,有像我这样的菜鸟(哭)程序员对 Android 存储目录不甚了解,复制粘贴网上的模板代码就会导致对存储目录的胡乱使用,也有明知不可为而为之的“黑心”程序员,故意利用 Android 存储目录“漏洞”来达到不可告人的目的。
最后,提醒各位,作为开发者,还是要恪守底线;作为 Android 用户,要加强隐私安全意识,不要随意下载未知来源的 App,多加注意各类 App 所需的应用权限(它们可能在背后偷偷利用你所赋予的权限干你不知道的事)。