Android 手机的常用存储路径浅析

31 篇文章 0 订阅
28 篇文章 0 订阅

内存与外存:

  • 早期的 Android 手机分为内存、外存,内存是手机自带的,外存是可以额外添加的。
  • 现在的 Android 手机普遍都只有内存,没有外存。

运行内存和其他内存:

内存可以分为运行内存和其他内存,如 6G/64G 的手机指的就是 6G 的运行内存和 64G 的其他内存。

  • 运行内存使用 RAM(Random Access Memory),读写速度更快。
  • 其他内存使用 ROM(Read Only Memory),更便宜。
    (原始的 ROM 只能读,后来出现了可读可写的 Flash Memory,但习惯上仍叫做 ROM)

私有内存和共有内存:

其他内存可分为私有内存和共有内存。

  • 私有内存包括 data、cache、system 等目录。
  • 共有内存指 storage 目录。

/sdcard、/storage/sdcard、/mnt/sdcard、/storage/sdcard0:

  • /sdcard、/mnt/sdcard、/storage/sdcard0,都是一个软链接,指向:/storage/emulated/0
  • /storage/sdcard 不存在

/data/data 与 /data/user/0:

  • 单用户时,/data/data 指用户数据文件夹
  • 多用户时,/data/user/0 指用户 0 的数据文件夹

/data/data、/sdcard/Android/data、/sdcard:

  • /data/data/packagename 目录会在应用卸载后自动删除,只有本应用可读写,读写无需权限
  • /sdcard/Android/data/packagename 目录会在应用卸载后自动删除,所有应用均可读写,本应用读写无需权限,其他应用读写需权限
  • /sdcard 中的其他目录,不会在应用卸载后自动删除,所有应用均可读写,读写需权限

/data/data/packagename 目录的大小:

  • /data/data/packagename 的大小就是 /data 的大小,/data 目录大小没有限制。通过 adb shell df 查看 ,发现 data、sdcard 的总空间、可用空间都一致,即它们位于一个分区,共享同样的空间。
    (似乎很早之前它们是不同的,见http://www.miui.com/thread-1355995-1-1.html)

  • /Android/data 目录也位于 sdcard 的分区。

    // 小米 mix 2,android 9.0
    // 华硕,android 5.0
    chiron:/ $ df -h
    Filesystem       Size  Used Avail Use% Mounted on
    rootfs           2.6G  6.1M  2.6G   1% /
    tmpfs            2.7G  804K  2.7G   1% /dev
    tmpfs            2.7G     0  2.7G   0% /mnt
    /dev/block/dm-0  4.8G  3.1G  1.6G  65% /system
    none             2.7G     0  2.7G   0% /sys/fs/cgroup
    /dev/block/sda17  51G   17G   34G  34% /data
    /dev/block/sde37  12M   10M  1.4M  88% /system/vendor/dsp
    /dev/block/sde42 806M  429M  361M  55% /cust
    /dev/block/sda16 232M  4.2M  220M   2% /cache
    /dev/block/sda10 4.9M  160K  4.8M   4% /dev/logfs
    /data/media       51G   17G   34G  34% /storage/emulated
    

常用存储路径的获取方法:

Environment.getDataDirectory().absolutePath = /data
Environment.getRootDirectory().absolutePath = /system
Environment.getDownloadCacheDirectory().absolutePath = /cache
Environment.getExternalStorageDirectory().absolutePath = /storage/emulated/0
context.getDataDir() = /data/user/0/packagename
context.getCacheDir() = /data/user/0/packagename/cache
context.getFilesDir() = /data/user/0/packagename/files
context.getFileStreamPath("aa") = /data/user/0/packagename/files/aa
context.getDir("aa", Context.MODE_PRIVATE) = /data/user/0/packagename/app_aa
context.getExternalCacheDir() =  /storage/emulated/0/Android/data/packagename/cache
context.getExternalFilesDir(null) = /storage/emulated/0/Android/data/packagename/files

目录测试:

小米 mix 2,android 9.0(如下图)
小米 4,android 6.0(如下图)
荣耀 5A,android 6.0(比下图多了一个存在的,/storage/sdcard0 也是一个软链接,指向 /storage/emulated/0)

图一:特定路径是否存在
图二:方法调用获取的路径
在这里插入图片描述 在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值