美文网首页android 集结号android版本监容
Android - 文件系统与Android11 分区存储

Android - 文件系统与Android11 分区存储

作者: xlq | 来源:发表于2020-08-06 20:20 被阅读0次
*认识Android文件系统
*了解分区存储
*分区存储的适配

一、Android文件系统

Android文件系统分为 内部存储(internal storage)外部存储(external storage)

1.1 用一个表格来直观对比一下两者:

storage.png

1.2 应用的私有路径

应用在安装之后,系统会自动在内部存储和外部存储,分别建立应用的私有存储区域。

内部存储 : data/user/0/packageName
外部存储 : storage/emulated/0/android/data/packageName

当应用卸载或者清除数据后,该区域文件会被删除。

1.3 内外部存储图解


storage2.png

二、 了解分区存储

Android 10版本中,Google推出 分区存储(scoped storage)的功能。

背景
分区存储功能是针对内置的外部存储来说的,很多应用喜欢在外部存储的根目录创建自己的文件夹,比如:storage/emulated/0/***

这样做的好处:1. 当不断向该目录存储时,应用自己的容量不会变化; 2. 当应用卸载时,该目录下文件不会被删除,可用于保存一些可持久性的文件。

但是也有坏处: 1. 对用户来说,会有很多垃圾文件存在于手机中;2. 只要获取到Read 和 Write权限,就可以随意访问外部存储的任何目录,信息安全存在隐患。

分区存储

  1. 每个应用向自己的私有目录读写文件,不需要读写权限。私有文件目录具体路径: storage/emulated/0/android/data/packageName/ ,获取方法: Context#getExternalFilesDir()

  2. 应用即使获取了读写权限,也无法访问其他应用的私有目录。

  3. 当应用需要获取媒体文件时,通过 MediaStore API 向公共存储目录DCIM、Music或者Movie获取。同样写媒体文件也是如此。并且读写自己的文件时不需要申请权限。 只有读其他应用的媒体文件时才会需要申请READ_EXTERNAL_STORAGE权限。
    (更新:Android11为目标平台时,可以使用文件直接路径去访问媒体,这是在Android10上没有的,应用的性能会略有下降,还是推荐使用MediaStore )

  4. 当应用需要获取其他非媒体文件时,比如doc、pdf文件,需要使用 系统的文件选择器SAF 来进行访问。

  5. 所以WRITE_EXTERNAL_STORAGE权限,在未来的Android11版本里,会被废弃。 (写文件不需要权限,只能在私有目录和公共目录写文件)

三、分区存储适配

旧版存储位置迁移

除了应用的私有目录和公共目录,其他位置都称为 旧版存储位置,我们需要将旧版存储位置的数据迁移到能兼容分区存储的位置。

  1. 如果以Android 11为目标平台,需要在manifest清单中标记preserveLegacyExternalStorage 为true,这样在Android11的机器上覆盖安装时,才能访问旧版存储位置,才能去做迁移。(卸载重装会失效)

  2. 如果以Android10为目标平台,需要在manifest清单中标记requestLegacyExternalStorage 为true,这样可以停用分区存储,然后就能做迁移。

  3. 如果以Android 9及以下为目标平台时,就能正常的进行文件移动。将应用在外部存储器根目录的保存的数据中,如果能接受随应用的卸载而删除的文件,迁移至storage/emulated/0/android/data/packageName/目录下。需要和其他应用共享的媒体文件,迁移至媒体存储位置。 非媒体文件,迁移至

正确使用读写API
  1. 只在外部存储的应用私有目录下,用直接路径读写文件
  2. 访问或者共享媒体文件,使用MediaStore在公共目录下读写文件
  3. 访问或者共享非媒体文件,使用系统的文件选择器SAF在公共目录Download下读写文件

相关文章

  • Android - 文件系统与Android11 分区存储

    *认识Android文件系统 *了解分区存储 *分区存储的适配 一、Android文件系统 Android文件系统...

  • Android SdCard路径说明

    Android文件系统目录结构 Android中主要的存储分区有/data /storage /sdcard /d...

  • android存储分区和android11填坑

    android的物理存储划分 安卓设备的物理存储 分为两大块,内部存储和外部存储 内部存储设备中每一个安装的 Ap...

  • Android 10.0 新特性

    分区存储(沙盒) 关于Android Q分区存储的一些适配心得 Android Q 在外部存储设备中为每个应用提供...

  • 应用如何适配 Android 11

    分区存储机制这点在 Android 10 上面已经有所体现了,如果 Android 就采用了分区存储机制,那么这里...

  • Android各版本的外部存储配置建议

    采用分区存储只能读写外部共享目录。采用非分区存储是可以读写外部存储任何目录的。注意:android10在分区存储模...

  • Android11 data obb目录访问

    原文《Android11 无Root 访问data目录实现、Android11访问data目录、Android11...

  • 存储优化

    Android存储基础 1、Android 分区 分区简单来说就是将设备中的存储划分为一些互不重叠的部分,每个部分...

  • Andorid 11调用系统裁剪

    随着各大厂商对android11的升级推送,现在已经有了一定android11的机型,关于android11的适配...

  • android分区存储

    manifest中有ScopedStorage 属性表示项目已适配了分区存储但是targetsdk >=30 会被...

网友评论

    本文标题:Android - 文件系统与Android11 分区存储

    本文链接:https://www.haomeiwen.com/subject/frjqrktx.html