Android 4.4 KitKat雖然已經發布很久了,還升級了好多次,但在浩如煙海的源代碼中,依然隱藏著大量的新東西等待挖掘,比如第三方應用對SD卡的訪問。
安卓系統手機有一套自己的存儲管理制度:幾乎任何類型的存儲設備都被稱為“外部存儲”(external storage),包括內部的NAND閃存,這個叫做“主要存儲”(primary storage),而其他的一切都是“次要存儲”(secondary storage),比如SD卡。
隨著安卓系統的不斷升級,第三方應用對存儲的訪問權限控制經過了多次調整,詳細三說起來就復雜了,這里重點說最早、最常用的寫入要求權限“WRITE_EXTERNAL_STORAGE”,它可以讓應用寫入主要存儲(內置閃存),但不能寫入次要存儲(SD卡)。
安卓4.4里邊,對于對所有外部存儲,其上的文件屬性都改為基于文件夾結構,應用無需獲取WRITE_EXTERNAL_STORAGE權限,即可在外部存儲上管理與自己包名相關的文件夾。舉例來說,如果應用的包名是name com.example.foo,那么外部存儲上的Android/data/com.example.foo/文件夾就是它的了,可隨意訪問。
這其中也包括SD卡,第三方應用可以在上邊創建一個屬于自己的專區,隨意讀寫、刪除,就像在內置存儲是各樣。
除此文件夾之外的其他地方,第三方應用仍然會被嚴格限制,得不到寫入和刪除權限。
不過這也存在一個潛在風險:SD卡是可以隨意插拔的,可以在電腦上訪問,因此可能會導致泄密。
另外需要特別注意的是,應用卸載的時候,在SD卡上創建的相應文件夾、數據都會被同時完全刪除,所以如果有照片、文檔等個人資料,應當避免這么做。
最后,U盤等設備的訪問控制不在本文討論范圍之內。
最后的最后,安卓系統有自己的標準,OEM廠商、ROM開發者又有各自的一套,經常不會嚴格遵循Google制定的規則,因此剛才說的種種不一定會出現在你的手機里。