写点什么

Android 文件系统总结——从 -Android-Q-,面试必备知识点

用户头像
Android架构
关注
发布于: 刚刚

始终存在且只读挂载,刷 ROM 的分区.


查看方式


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(136, 143, 150); background: rgb(0, 0, 0); line-height: 1.6; border: none; text-align: right;">12</pre>


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(197, 200, 198); background: rgb(29, 31, 33); line-height: 1.6; border: none; width: 364px;">/systemEnvironment.getRootDirectory().getAbsolutePath()</pre>


|


主要目录


  • /system/{packageName}?预装 apk 目录,系统应用

  • /system/lib?自带 apk 用到的库文件

  • /system/bin?存放一些可执行文件,基本上都是由 C/C++ 编写,比如 app_process 用于启动 Zygote

  • /system/xbin?存放一些可执行文件,目录可为空

  • /system/framework?启动系统所用到的框架

data 分区(Internal Storage)

Internal Storage,操作该区域存储文件,需要 root 权限操作,用于存放应用内的重要信息,


查看方式


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(136, 143, 150); background: rgb(0, 0, 0); line-height: 1.6; border: none; text-align: right;">12</pre>


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(197, 200, 198); background: rgb(29, 31, 33); line-height: 1.6; border: none; width: 364px;">/dataEnvironment.getDataDirectory().getAbsolutePath()</pre>


|


主要目录


  • /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}/


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(136, 143, 150); background: rgb(0, 0, 0); line-height: 1.6; border: none; text-align: right;">12345</pre>


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(197, 200, 198); background: rgb(29, 31, 33); line-height: 1.6; border: none; width: 306px;">/data/data/{packageName}/files/context.getFilesDir().getAbsolutePath();


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


|

storage 分区(External Storage/Shared Storage)

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


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


查看方式


|


<pre style="overflow: auto; font-family: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(136, 143, 150); background: rgb(0, 0, 0); line-height: 1.6; border: none; text-align: right;">123</pre>


|


<pre style="overflow: auto; font-famil


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


y: consolas, Menlo, "PingFang SC", "Microsoft YaHei", monospace; font-size: 13px; margin: 0px; padding: 10px; color: rgb(197, 200, 198); background: rgb(29, 31, 33); line-height: 1.6; border: none; width: 343px;">/storage/emulated/0@Deprecated Android10 版本上不再推荐使用该 ApiEnvironment.getExternalStorageDirectory()</pre>


|


主要目录


  • 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?权限

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android文件系统总结——从-Android-Q-,面试必备知识点