如何讓Android app配置文件不要堆在根目錄?

有寶


下週三,谷歌2019 I/O開發者大會就將在其總部美國山景城的海岸線圓形劇場(The Shoreline Amphitheatre)舉行。如無意外的話,此次活動中也將迎來全新的Android Q大版本更新,以及Pixel 3a系列中端機型的亮相。

不過在距離此次開發者大會的前一週,谷歌卻宣佈了一個可能讓用戶略感到失望的消息。考慮到大量開發者認為適配新機制的難度較大,因此一個在Android Q上極大程度改善使用體驗的新特性“Scoped storag”,將會被推遲一年上線。

文件存儲沙箱化與Android Q無緣

根據目前的相關信息顯示,在即將發佈的Android Q上,谷歌將會帶來用戶期盼已經的黑暗模式、桌面模式、更強力的隱私管理、系統級的屏幕錄製、運營商SIM卡鎖定、多任務處理功能Bubbles,以及新字體新圖標形狀等等眾多的改變。

那麼,這個所謂的“Scoped storag”是什麼呢?事實上,這是谷歌原計劃在Android Q上引入的全新文件存儲機制,即文件存儲沙箱化,能夠對應用文件存儲、訪問、分享等行為,帶來天翻地覆的變化。

簡單來說,就是在啟用這項新特性之後,通過第三方APP創建的文件夾,都只能被放置在一個個互不干擾的獨立存儲空間中,而無法像目前一樣寫入真正的存儲目錄,以實現真正的沙箱化。

存儲沙箱化將讓你的手機更私密、更安全

如果看到這裡還是一頭霧水的話,那麼不妨對比一下目前現行的Android系統存儲機制,就會很容易發現變化之處。Android Q之前,由於其系統底層是Linux,而Linux的機制是一個用戶對應一個uid,再加上Android是單用戶系統,而這裡的“用戶”就變成了一個個的APP。

在APP安裝時,系統就會分配給其獨立的存儲區域以及uid,APP在虛擬機(ART)中運行,有獨立的空間和資源,在這一過程中,ART和Linux對文件訪問的控制實現了沙箱機制。當然,開發者可以給同樣簽名的應用(比如同一家公司的產品)配置相同的uid,以來實現資源共享。

但是Android在允許APP訪問屬於自己存儲區域(/data/data/packagename/ ),以及無法訪問不屬於自己的私有數據的限制之外,手機上的外部存儲(/sdcard)空間卻是共享的,也就是所有的APP都能隨意使用。需要指出的一點是,“sdcard”並非單純指常說的SD卡,而是指ROM在只讀型內存,以及不可見的內部存儲之外的區域。

絕大多數Android手機用戶應該都會遇到這種情況——以USB調試模式將手機連接到電腦上之後,在根目錄上可以看到茫茫多亂七八糟的文件夾,刪也不是,不刪著實讓人頭大。而在使用了“Scoped storag”之後,所有的緩存文件都被強制限制在了 “/sdcard/Android/sandbox”之中,在sdcard界面的文件夾數量減少到原來的不到百分之五,此時自然也就會變得更加簡潔。

APP只能在外部存儲中訪問自己的數據文件夾(位於/data/media/{user}/android),要訪問音樂或圖像照片等共享媒體文件,則必須請求用戶給予特定這些用例的動態存儲權限,獲得MediaProvider查詢系統的文件,並使用對應的Content URI來訪問。

比如說在新機制下,微博想要讀寫外部存儲的時候,系統並不會開放所有權限,而是隻能讓微博只能讀寫 “/sdcard/Android/sandbox/WeiBo” 。因此這時微博想要知道用戶在隔壁的微信裡幹了啥,也就顯然是無法實現的了。

開發者不買賬,谷歌也沒辦法

看到這裡,作為用戶是不是覺得“Scoped storag”很好很給力,對於隱私保護和安全性都有明顯的提升。但是抱歉,谷歌討好消費者的努力,並沒有得到開發者的歡迎,甚至不光口頭抱怨,在行動上也陽奉陰違。畢竟這項功能將實實在在傷害開發者的利益,因此在目前的Android Q Beta 2上,完全適配這一功能的APP少之又少,而許多其他APP在測試版中呈現出的,就是瘋狂閃退的現象。

開發者認為谷歌沒有給他們足夠的時間,來為StorageAccessFramework(存儲訪問框架)進行所有必要的更改,而不進行更改的後果,就是運行頻繁報錯。而且由於沙箱化存儲影響了運行在Android Q上的所有應用程序,因此無論該APP是否真正針對Android Q進行開發,都必須進行更新。

事實上,不同於之前Android O/P上提供API LEIVE很快被開發者接受,文件存儲沙箱化被其陽奉陰違也有著不少的原因。首先這一改變將提升開發者的工作量,同時讓第三方APP的一些小九九再也不能實現。在新的存儲機制之下,一款APP卸載之後就與iOS版一樣是無殘留的,之前的數據會一併清空,而這與目前許多APP,特別是國內應用“卸載後重裝依然能夠讀取老數據”的設計思路完全衝突,畢竟將會導致用戶流失率的提升,更不利於用數據吹牛。

再加上,如果Android也與iOS一樣完成整個系統的沙箱化,無法隨意訪問外部存儲,系統底層直接封殺越界讀寫,那麼也就意味著某些心存不良的APP,此前隨便看照片及通訊錄等敏感數據的行為將成為歷史。而開發者在此前長時間已經習慣了這樣操作的情況下,突然這樣改變自然就會導致戒斷反應。

舉個例子,之前某東金融就被傳出在後臺運行時,會自動保存用戶的屏幕截圖,抓取用戶使用拍照功能拍攝的照片,就是因為保存照片的文件夾屬於外部存儲,基本是個APP都能訪問。有的APP自律性比較高,不是自己的東西不看,但是有的下限就很低了,而“Scoped storag”就是為了杜絕這類現象,但是這不就擋著人家財路了嗎?

越界讀寫消失的同時,也會在無形中讓第三方文件管理類APP成為歷史名詞,畢竟都看不了其他APP都存放了些什麼,自然也就無法進行自己的本職工作。

從這裡就能看出,谷歌對於Android越來越不上心的原因,確實有在為用戶考量。但是一方面是Android本身的各種先天性不足,另一方面谷歌在Android中的地位是盟主和大股東,因此儘管說話確實一言九鼎,可架不住自家小弟們各懷鬼胎,而這一回就很有一種“陛下何故謀反”的感覺。

畢竟,谷歌不像作為App Store和iOS唯一股東的蘋果,能夠對旗下的軟件生態擁有說一不二的權力。有10086種理由直接封殺與自己競爭的第三方APP,開發者只能去找歐盟訴苦的情況下,谷歌就只能放任這些第三方APP與自己搶生意。

在谷歌另起爐灶的Fuchsia OS第一個“發佈候選版本(release candidate)”,以及華為方舟編譯器先後亮相之際,Android這艘大船還是不是能一直前進下去,恐怕現在誰都說不好了。


分享到:


相關文章: