Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )

网友投稿 777 2022-05-29

文章目录

一、Android 10 以前的存储机制

二、Android 10 及以后的分区存储机制

三、Android 10 中的存储过渡方案

四、文件索引数据库

五、相关文档资料

一、Android 10 以前的存储机制

Android 10 10 10 之前的文件系统 , 内存分为两块 ,

应用私有目录

, 和

【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 )

共享存储空间

;

私有目录 : 只能保存本应用的数据 ,

其它应用无法读写该目录中的数据 ,

应用卸载时 , 该目录自动删除 ;

共享存储空间 :

所有的应用都可以随意访问 , 随意读写该区域内的数据

, 数据可以任意放置 , 删除 , 修改 ;

应用卸载时写出到该区域的数据不会被删除 ;

任何目录可以存储任何类型文件 , 可以将图片存储到 Movies , 视频存储到 Music 目录中 ;

共享存储空间 绝对是个 天坑 , 能不用尽量不用 ;

二、Android 10 及以后的分区存储机制

Android 10 10 10 及以后的文件系统 :

私有目录 : 与之前保持一致 , 只能保存本应用的数据 ,

其它应用无法读写该目录中的数据 ,

应用卸载时 , 该目录自动删除 ;

共享存储空间 : Google 官方对该存储区域进行了统一规划 , Android 11 11 11 中 , 每个目录存储什么类型的文件 , 都有相应规范 , 文件不能乱放置 ;

文件存储类型限制 : 文件一旦放错位置 , 就会抛异常 ;

专门存储 图片文件 的目录

Pictures

, 只能存放图片 , 不能存放其它类型文件 ,

专门存储 视频文件 的目录

Movies

, 只能存视频文件 ;

专门存储音频文件的目录

Music

, 只能存储音频文件 ;

专门存储文档文件的目录

Document

, 只能存储文档相关文件 ;

Download 目录可以放置任何类型的文件 ;

三、Android 10 中的存储过渡方案

Android 10 10 10 版本是过渡版本 , 在该版本中可以选择启用分区存储 , 也可以选择不用 , 在清单文件的 application 节点设置

requestLegacyExternalStorage=“

true

属性可以设置 不启用 分区存储 方案 , 但是

在 Android 11 11 11 中 必须 启用分区存储

, 否则应用不能兼容 Android 11 11 11 系统 ;

Android 10 10 10(API 级别 29 29 29)及之前的系统版本 , 操作文件时 , 使用的 File 类 , 该类只支持传统的存储方式 ,

不支持分区存储 ;

Android 11 11 11(API 级别 30 30 30)中不能使用 File 进行文件操作 , 只能使用 MediaStore 进行文件操作 ;

参考文档 - 暂时停用分区存储 : https://developer.android.google.cn/training/data-storage/use-cases#opt-out-scoped-storage

四、文件索引数据库

Android 11 11 11(API 级别 30 30 30) 之后的存储机制 : Android 中所有文件存储 , 都会将文件的索引存储在数据库中 , 在

/data/data/com.android.providers.media

目录下的文件就是专门用于管理该数据库的 ;

/data/data/com.android.providers.media

目录下有 4 4 4 个目录 , cache , code_cache ,

databases

, shared_prefs , 其中 databases 就是存储的上述文件索引数据库 , 有两个数据库文件 :

external.db ,

internal.db ;

查看命令 :

walleye:/ # cd /data/data/com.android.providers.media walleye:/data/data/com.android.providers.media # ls cache code_cache databases shared_prefs walleye:/data/data/com.android.providers.media # cd databases walleye:/data/data/com.android.providers.media/databases # ls external.db internal.db walleye:/data/data/com.android.providers.media/databases #

1

2

3

4

5

6

7

将 external.db 数据库拷贝出来 , 使用 SQLite 查看工具查看该数据库 , 该数据库中有一张 files 数据表 , 就是存放文件索引的 , 只有开启分区存储时 , 才将所有的文件都保存在该数据库表中 ;

生成文件索引 :

在老版本的文件系统中

, 只有将文件放在 Pictures , Movies , Music , Document 等目录下时 , 才生文件索引放在数据库中 , 在 SD 卡其它位置创建文件 , 不会生成文件索引 ;

在新版本的分区存储中

, 上述数据表中管理所有 SD 卡上的文件 , 所有的文件和目录都会显示在上述数据库中 ;

external.db 数据库 files 数据表字段简介 :

_id : 每个文件都会被赋予一个 id , 不会重复 ;

tittle : 文件名称 , 一般是文件的完整名称去掉文件后缀 ;

_display_name : 文件的完整名称 , 带后缀 ;

mime_type : 文件的 MIME 类型 ;

五、相关文档资料

Android 文件处理参考文档 :

数据和文件存储概览 : https://developer.android.google.cn/training/data-storage

访问应用专属文件 : https://developer.android.google.cn/training/data-storage/app-specific#kotlin

保存到共享的存储空间 : https://developer.android.google.cn/training/data-storage/shared

管理存储设备上的所有文件 : https://developer.android.google.cn/training/data-storage/manage-all-files

分享文件 : https://developer.android.google.cn/training/secure-file-sharing

应用安装位置 : https://developer.android.google.cn/guide/topics/data/install-location

Android 存储用例和最佳做法 : https://developer.android.google.cn/training/data-storage/use-cases

FileProvider : https://developer.android.google.cn/reference/androidx/core/content/FileProvider

Android

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Ubuntu配置samba共享目录
下一篇:云性能测试服务CPTS怎么玩?
相关文章