Android Q适配(存储空间)

介绍

developer.android.google.cn/preview/pri…android

存储访问框架:developer.android.google.cn/guide/topic…shell

FileProvider:developer.android.google.cn/training/se…app

测试方案

测试行为变动

要在 Android Q 测试版 1 中启用此行为变动,请在终端窗口中执行如下命令:框架

adb shell sm set-isolated-storage onide

查看是否已生效测试

adb shell getprop sys.isolated_storage_snapshotui

测试兼容性模式行为

测试您的应用时,您能够经过在终端窗口中运行如下命令来为外部文件存储访问权限启用兼容性模式:google

adb shell cmd appops set your-package-name android:legacy_storage allowcode

停用兼容性模式,请在 Android Q 上卸载而后从新安装您的应用,或在终端窗口中运行如下命令get

adb shell cmd appops set your-package-name android:legacy_storage default

影响

变动以下

developer.android.google.cn/preview/pri…

  1. 私有文件沙盒

    1. 沙箱目录: /sdcard/Android/sandbox/packagename/
    2. 任何其余应用都没法直接访问您应用的沙盒文件。因为文件是您应用的私有文件,所以您再也不须要任何权限便可在外部存储设备中访问和保存本身的文件
    3. 当app卸载后,沙箱中的文件删除
  2. 媒体文件共享集合

    1. 访问权限
    2. 共享方案
  3. 照片访问

    1. 位置信息
    2. 图库显示
  4. 跨应用文件 读取和存储跨应用文件

影响范围

Google 把 Android Q 上会被沙箱化条件设为 Target SDK 至少为 Q (29) 的应用或者运行 Android Q 时全新安装的应用。不符合这个条件的应用将会运行在兼容模式下,在兼容模式中应用行为大体和过去相同,以保证不会出现严重的数据丢失问题。兼容模式在应用从新安装后会被关闭。

注意:即便应用Target SDK < 29也会被沙箱化

影响点

  1. 沙箱化后,沙箱目录:/sdcard/Android/sandbox/packagename/,应用不能再经过 Java File API 来互相访问内部存储文件数据,应用访问 “/sdcard” 实质上访问的是你的应用的沙箱目录,能够理解为“存储重定向”; getExternalStoragePublicDirectory(),getExternalStorageDirectory(),/storage/emulated/0 都会直接映射到沙箱目录;访问这些文件路径存在自动映射,所以正常直接使用理论上都是没问题的。

  2. 可能存储数据丢失:当用户手机从Android Q如下版本升级到Android Q版本的时候,应用访问不了以前保存在/sdcard下面的内容

  3. 沙箱空间跟过去的内部存储空间内 “Android/data/packagename” 的文件夹同样,会在应用卸载时被永久清除没法恢复,所以好比一些用户主动下载保存的文件当然不能存在沙箱空间,须要存到沙箱外面

检查及适配

checke点

sdcard

getExternalStorageDirectory

getExternalStoragePublicDirectory

/emulated/0

适配方案

  1. 经过存储方案框架https://developer.android.google.cn/guide/topics/providers/document-provider
  2. 配套应用文件共享https://developer.android.google.cn/training/secure-file-sharing/setup-sharing
相关文章
相关标签/搜索