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
相關文章
相關標籤/搜索