
Android 文件系统与Android11 分区存储
发布日期:2021-05-14 01:35:52
浏览次数:17
分类:精选文章
本文共 1181 字,大约阅读时间需要 3 分钟。
Android 文件系统与分区存储深入解析
一、Android 文件系统概述
Android 文件系统的存储方式通常分为 <strong>内部存储(internal storage)</strong>
和 <strong>外部存储(external storage)</strong>
两种:
- 内部存储:通常 reserved 为应用程序自己私有的存储区域。文件路径示例:
data/user/0/packageName
- 外部存储:Android 系统会为应用自动创建私有存储区域。文件路径示例:
storage/emulated/0/android/data/packageName
需要注意的是,内外部存储的文件在应用卸载或清除数据时,会被系统删除。
二、分区存储(Scoped Storage)的功能解析
Android 10 版本中,Google 推出了 分区存储(Scoped Storage)的功能,主要针对内置的外部存储实现:
-
背景问题:
许多应用在外部存储的根目录下创建自己的文件夹(如:storage/emulated/0/
***),这种做法存在以下问题: - 新增文件时,应用的默认容量不会增加
- 应用卸载后,相关目录下的文件不会被删除,可用于持久化存储
- 可能导致大量垃圾文件存在
- 信息安全隐患:只要获得读写权限,其他应用即可访问外部存储的任意目录
-
分区存储实现:
通过分区存储,应用可以自定义自己的私有目录,避免与其他应用直接竞争资源:- 私有文件目录路径:
storage/emulated/0/android/data/packageName/
- 获取方法:调用
Context#getExternalFilesDir()
- 私有文件目录路径:
三、分区存储的适配与应用开发注意事项
1. 旧版存储位置迁移策略
-
Android 11:
在 AndroidManifest.xml 中设置preserveLegacyExternalStorage
属性为true
,才能在覆盖安装时访问旧版存储位置。卸载重装会导致失效。 -
Android 10:
同样需要在 AndroidManifest.xml 中设置requestLegacyExternalStorage
属性为true
,但覆盖安装才能访问旧版存储位置,卸载重装会失效。在 Android 11 系统中需要组合设置才能正常工作。 -
Android 9 及以下:
可以正常迁移文件,默认支持从外部存储根目录迁移至应用私有存储区域。对于需要共享的媒体文件,可以迁移到媒体存储位置。
2. 正确使用读写 API
- 外部存储:文件读写应仅在应用私有目录下完成。
- 媒体文件:使用
MediaStore API
访问公共目录(如:DCIM、Music、Movie)。 - 非媒体文件:向用户提供文件选择器
SAF
(系统文件选择器),以确保安全性。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月14日 02时11分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Course Schedule II
2019-03-10
Django ORM操作
2019-03-10
京喜小程序体验评分优化实践
2019-03-10
C#中文转换成拼音
2019-03-10
C++错误笔记
2019-03-10
【无线通信模块】GPRS DTU不稳定和容易掉线原因
2019-03-10
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10
国标流媒体服务器以ROOT身份运行提示“permission denide”报错解决
2019-03-10
qt中转到槽后如何取消信号与槽关联
2019-03-10
qt问题记录-spin box与double spin box
2019-03-10
移动端事件
2019-03-10
css 图片按比例缩放
2019-03-10
小程序form表单里面buton点击事件失效
2019-03-10
微信小程序placeholder设置自定义样式
2019-03-10
spring-day01
2019-03-10
spring的值注入与组件扫描
2019-03-10
C#跨窗体程序调用方法的具体操作
2019-03-10
C#中创建Android项目
2019-03-10