在Android Gingerbread引入了StorageManager這東西, 似乎是為了OBB(Opaque Binary Blobs)這功能而來的, 不過, 似乎是也還沒把tool含到SDK內, 也沒很詳細的說明文件, 所以看起來現在好像也沒啥人去用這個, 實際上試了一下, 最後還是有問題, 搞不好還有bug, 懶得繼續追下去了, 不過大致上理解怎來利用這東西
OBB是一個含有加過密的檔案系統的檔案, 唸起來頗繞口, 不過如果對Linux有點熟悉的話, 它是一個磁碟映像檔(image file), 最後會以loopback device的方式掛載入Android內(Android底層是Linux, 採用這種方式也不足為奇)
由於是加密過的, 所以, 應用程式可以把需要保密的內容放到這個檔內, 比如說私密的通訊資料庫啦, 或是見不得人的照片…(呃, 我講到哪去了)
要建立一個OBB的檔案需要幾個tool:
mkobb.sh
pdkdf2gen
obbtool
由於目前SDK好像還沒這幾個東西, 所以必須從aosp裡面去找, 前兩者是一組的, 要一起配合, 而且mkobb.sh只能在Linux底下跑, 如果你嘗試在Mac上跑(像我一樣), 是會失敗的 (不過想想, 目前沒支援Mac也很合理)
Linux下, 有幾個kernel module是一定必要被載入的
sudo modprobe cryptoloop
sudo modprobe twofish
sudo modprobe vfat
這樣你才可以建立一個被加密過的loopback file system image
執行的指令如下:
mkobb.sh -d obbdir -k password -o obbfile
-d 後面那個obbdir可以改成任何一個存在的目錄, 建立好的obb檔會幫你含入所有這目錄裡面的檔案, -k 後面輸入加密的密碼, -o 後面加入輸出的檔名
執行後內容會如下:
最後一行裡的"5f88a3619e6544ef"這個salt很重要, 要抄下來, 之後會用到
接下來就要用obbtool加簽章了, obbtool用法如下:
加簽章: obbtool a -n com.yourcompany.app -v 1 obbtest.obb -s 5f88a3619e6544ef
移除: obbtool r ~/Dropbox/obbtest.obb
-n 後面是package name, 必須要跟你的應用程式的package name相同, -v 後面則是自定的版本, -s 後面接的就是剛剛做mkobb.sh後產生的salt了
這樣這個obb檔就完成了, 可以把它放到手機sdcard或其他地方讓你的程式存取
在程式內掛載obb的話就要用到StorageManager了:
不過目前, 我碰到的狀況就是, 明明state已經變成MOUNTED, 但我就是取不到mounted path, 怪怪的