Android文件系统总结——从-Android-Q-,万字总结

本文详细介绍了Android设备上的不同存储区域,包括/data目录的结构、私有存储空间的区分、外部存储的使用权限和变化,以及不同版本Android中的媒体存储管理。同时给出了学习资源和注意事项,旨在帮助Android开发者理解和管理应用的存储需求。
摘要由CSDN通过智能技术生成

|

/data
Environment.getDataDirectory().getAbsolutePath()

|

主要目录

  • /data/app 用于包含许多 apk 的文件列表

  • /data/cache 用于保存临时缓存或者下载的文件

  • /data/data 用于存储 app 的数据

  • /data/data/{packageName} 以包名形式区分,为app的私有存储空间,app卸载之后会删除该包下的文件

  • /database用于存储数据库文件

  • /shared_prefs 用于存储 shared 文件

  • /lib用于存储 so 库

  • /code_cache优化过的代码缓存

  • /cache缓存空间, context.getCacheDir() 获取

  • /files 数据存储空间,contet.getFilesDir() 获取

一般的,一个应用的内部存储路径未 /data/data/{packageName}/ 。但是对于特殊机型比如华为,小米可能为 /data/user/0/{packageName}/

|

1
2
3
4
5

|

/data/data/{packageName}/files/
context.getFilesDir().getAbsolutePath();

/data/data/{packageName}/cache/
context.getCacheDir().getAbsolutePath();

|

storage 分区(External Storage/Shared Storage)

External Storage/Shared Storage,不需要 root 权限就可以操作。可能包含可移除的存储介质,在使用之前需要判断是否挂载(mounted)

对于 4.4 以前的手机,设备存储很小,存在一个内置的存储空间,这部分空间就是内部存储。另外,还支持一个可以移除的存储介质,就是外部存储,比如 SD 卡。随着硬件升级,大部分大于 Android 4.4 的设备内置的存储空间可以划分为 “内部存储” 和 “外部存储”。同时,若此时还支持插入 SD 卡,则外部存储空间等于 “外部存储” 和 “SD卡存储” 之和。

查看方式

|

1
2
3

|

/storage/emulated/0
@Deprecated  Android10 版本上不再推荐使用该 Api
Environment.getExternalStorageDirectory()

|

主要目录

  • storage/emulated/0/Android/
  • media/{packageName},以包名的形式区分,app的私有多媒体空间,5.0 Api可用
  • obb/{packageName},以包名的形式区分,游戏 obb 数据文件
  • data/{packageName} 以包名的形式区分,app的私有存储空间
  • /cache 缓存空间,可通过 context.getExternalCacheDir() 获取
  • /files 数据存储空间,可通过 context.getExternalFilesDir() 获取, Android 10 通过以下方法进一步操作
  • /Music, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_MUSIC) 获取
  • /Podcasts, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_PODCASTS) 获取
  • /Ringtones, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_RINGTONES) 获取
  • /Alarms, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_ALARMS) 获取
  • /Notifications, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_NOTIFICATIONS) 获取
  • /Pictures, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_PICTURES) 获取
  • /Movies, 通过 context.getExternalFilesDirs(Environment.DIRECTORY_MOVIES) 获取
  • mediaobb,data Android10及以上 按包名为应用划分 沙盒目录,跟随 app 卸载而删除,外部无法访问
  • storage/emulated/0/Music/ Android 10及以上 无法通过路径访问,SAF,MediaStore 可行
  • storage/emulated/0/Pictures/ 访问同上
  • storage/emulated/0/Ringtones/ 访问同上
  • storage/emulated/0/Alarms/ 访问同上
  • storage/emulated/0/Notifications/ 访问同上
  • storage/emulated/0/Podcasts/ 访问同上
  • storage/emulated/0/Movies/ 访问同上
  • storage/emulated/0/Download/ 访问同上
  • storage/emulated/0/DCIM/ 访问同上
  • storage/emulated/0/Documents/ 访问同上
  • storage/emulated/0/Screenshots/ 访问同上
  • storage/emulated/0/Audiobooks/ 访问同上

Android 逻辑角度看

  • App-specific storage

  • 存储类型:应用专用存储,私有目录

  • 使用方法:getFilesDir(),getCacheDir(),getExternalFilesDir(),getExternalCacheDir(),getExternalMediaDirs()

  • 操作权限:内部存储不需要权限,外部存储从 Android4.4 之后也不需要

  • 外部应用访问:无法访问内部存储,Android 10及以后无法外部存储

  • 卸载是否移除:移除

  • Preferences

  • 存储类型:内部私有存储,键值对存在

  • 使用方法:Jetpack Preferences library

  • 操作权限:不需要

  • 外部应用访问:不可以访问

  • 卸载是否移除:移除

  • Databases

  • 存储类型:内部私有存储,持久化结构

  • 使用方法:Room persistence library

  • 操作权限:不需要

  • 外部应用访问:不可以访问

  • 卸载是否移除:移除

  • Shared storage - Media

  • 存储类型:共享存储,比如一些图片,视音频

  • 使用方法:MediaStore API

  • 操作权限:Android9或者更低版本都需要 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。Android10或更高版本在访问外部app才需要

  • 外部应用访问:可以访问,但是需要 READ_EXTERNAL_STORAGE 权限

  • 卸载是否移除:不移除

  • Shared storage - Documents、files

  • 存储类型:共享存储,比如文档,文件

  • 使用方法:Storage Access Framework

  • 操作权限:不需要

  • 外部应用访问:可以访问,文件选择器可以扫描到

  • 卸载是否移除:不移除

一些重要的建议

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

尾声

以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。

.(img-iQcXuxNv-1711633222236)]

尾声

以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。

[外链图片转存中…(img-wqih9jYv-1711633222236)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值