
作者: 軟件工程師 Jeff Sharkey 和產(chǎn)品經(jīng)理 Seb Grubb
應用沙盒是 Android 設計的核心部分,它可將不同的應用隔離。基于應用沙盒的基本原則,Android Q 引入了分區(qū)儲存特性。
自?Beta 1發(fā)布以來,我們收到了許多開發(fā)者關(guān)于這些變更的寶貴反饋,感謝大家?guī)椭覀兇蛟旄玫?Android 平臺!鑒于這些反饋,我們在更新迭代 Android Q Beta 的過程中也在不斷優(yōu)化這項特性。在這篇文章中,我們將與您分享在 Android Q 設備上如何聲明應用對分區(qū)儲存特性支持的方法,以及對開發(fā)者社區(qū)提交上來的一些問題的解答和最佳實踐。
幫助您支持分區(qū)儲存特性的幾項更新
我們預計分區(qū)存儲對那些遵循最佳實踐的應用所造成的影響很小。不過,部分開發(fā)者向我們反饋表示,分區(qū)儲存對于某些應用而言是一項需要謹慎應對的變更,他們需要更多的時間來評估它對應用的影響。我們自己也是開發(fā)者,因此我們十分理解您可能需要更多時間來確保應用與此項變更的兼容性。因此,我們很愿意協(xié)助您。
在即將發(fā)布的 Beta 3 版本中,如果應用的 target SDK 為 Android 9 Pie (API 等級 28) 或更低版本,那么,在默認情況下,應用儲存方式將不會發(fā)生任何改變,依舊采用與舊版本 Android 系統(tǒng)相同的儲存機制。在您更新現(xiàn)有應用以支持分區(qū)儲存的過程中,您可使用新的清單屬性讓應用在 Android Q 設備上啟用新的行為,即使應用針對 API 等級 28 或更低開發(fā)也無妨。
這些變更的具體實現(xiàn)細節(jié)將在 Beta 3 版本中公布,但我們想要提前通知您,幫助您更好地計劃對于 Android Q 設備的應用更新。在明年發(fā)布的下一個 Android 主版本中,不論應用針對哪個目標 SDK 等級開發(fā),都必須支持分區(qū)儲存特性,因此我們建議您提前在應用中添加支持。歡迎各位繼續(xù)向我們提交反饋,幫助我們進一步優(yōu)化分區(qū)儲存特性,以便為您應用的用例提供更好的支持。如果您有任何意見或建議,請參加分區(qū)儲存專題調(diào)研問卷;您可請前往?Google 錯誤追蹤器頁面或點擊這里提交錯誤報告或特性請求。
針對常見反饋的幾個最佳實踐
您的反饋十分有價值,對我們的設計決策幫助也很大。在這里,我們希望與您分享一下團隊對幾個常見問題的解答以及建議您采用的最佳實踐:
存儲共享媒體文件:?如果您的應用需要與其它應用 (如照片庫) 共享文件,而且即使在應用卸載后,這些文件仍需繼續(xù)保留在設備中,那么,請您使用MediaStore API。常見的媒體文件有以下三類特定集合:音頻?(Audio)、視頻?(Video) 和圖片?(Images)。至于其它類型的文件,您則可將其儲存在新的下載文件集合中。應用必須使用系統(tǒng)選擇器才能訪問下載集合內(nèi)的文件。
存儲應用內(nèi)部文件:?如果您的應用不與其它應用共享文件,請將文件儲存在包下目錄。這能幫助您有條理地管理文件并限制文件混亂,因為,當用戶卸載應用后,操作系統(tǒng)會負責接手后續(xù)的文件清除工作。Context.getExternalFilesDir()?函數(shù)可繼續(xù)使用。
權(quán)限及文件所有權(quán):?在使用 MediaStore 的情況下,應用無需權(quán)限便可訪問自己創(chuàng)建的文件,但是如果應用需要訪問由其它應用提供的文件,則需請求權(quán)限。不過,在用戶卸載應用之后又重新安裝的情況下,您需要再次向用戶請求權(quán)限,才能訪問您的應用之前所提供的媒體文件。
使用原生代碼或庫:?我們推薦的設計模式是先在 Java 或 Kotlin 代碼中尋找文件,然后將它的文件描述符 (file descriptor) 傳遞到您的原生代碼中。
高效處理多文件場景:?如果您需要在一個事務中進行批量文件操作,請考慮調(diào)用ContentProvider.applyBatch()。如需獲取更多有關(guān) ContentProvider 批量處理的內(nèi)容,請閱讀《內(nèi)容提供程序基礎知識》。
與系統(tǒng)文件選擇器 (file picker) 集成:?
如文字處理器一類的文檔應用可使用?OPEN_DOCUMENT?或?GET_CONTENT?action 來啟動系統(tǒng)文件選擇器。請閱讀《存儲訪問框架》,進一步了解兩者差異。
文件管理應用往往需要和各層目錄下的其它應用協(xié)同工作。請使用OPEN_DOCUMENT_TREE?讓用戶選擇目錄子樹,接著,應用便可處理返回目錄中的文件。在此項支持的幫助下,用戶可通過任何已安裝的DocumentsProvider事件訪問文件,而這些事件則由基于云的或本地的儲存解決方案所支持。
此外,我們還為您準備了詳細的《分區(qū)儲存開發(fā)者文檔》,您可仔細閱讀并獲取更多技術(shù)細節(jié)。
下一步
很高興看到開發(fā)者們這段時間以來對 Android Q 的熱情參與。我們將在接下來的幾個月中逐步收尾 Android Q 的開發(fā)工作,請繼續(xù)測試并向我們提交反饋。歡迎大家參加 Google I/O 2019 開發(fā)者大會,屆時將有更多關(guān)于分區(qū)儲存及其它 Android Q 特性的精彩內(nèi)容等著您。我們會在 5 月 8 日舉辦名為?“What’s New in Shared Storage”?的主題演講,感興趣的小伙伴可閱讀推文《觀看 Google I/O’19 的正確姿勢》了解直播平臺信息,我們會在大會前一天公布直播入口,敬請關(guān)注。
點擊這里提交錯誤報告或特性請求
