2012-08-23 34 views
5

Androidで暗号化されたOBB(Opaque Binary Blob)ファイルの作成/マウントに成功した人はいますか?これは、このquestion 1のフォローアップである:私は次のように実行されたことを記事に方向に続き、What is OBB(Opaque Binary Blob) in Android develop site?(ICSから4.01ベースラインを、Ubuntuの10.10-32bitとUbuntu 12.4-64bitの両方で試しました):Androidで暗号化されたOBBファイルを使用する

sudo modprobe cryptoloop 
sudo modprobe twofish 
sudo modprobe vfat 
./mkobb.sh -d /tmp/obb/ -kblahblah -o /tmp/out.obb -v 
obbtool a -n com.test.blah -v 1 -s 997ff9b1516a6788 /tmp/out.obb # 997ff... is the salt from the mkobb step 
obbtool i /temp/out.obb # verify the obb file 
adb push /temp/out.obb /sdcard/ 

ここから私はout.obbファイルを自分の電話機の/ sdcard /にコピーします。そして、次のコードでマウント:

String obbFile = Environment.getExternalStorageDirectory() + "/out.obb"; 
mgr = (StorageManager) getSystemService(Context.STORAGE_SERVICE); // mgr is a member varible of my main activity 
Log.i("OBB", "trying to mount : " + obbFile + " does it exist? " + new File(obbFile).exists()); 

if (mgr.mountObb(obbFile, "blahblah", new OnObbStateChangeListener(){ 

    @Override 
    public void onObbStateChange(String path, int state) { 
     Log.i("OBB", String.format("onObbStateChange:Path [%s] State=%d", path, state)); 
     if (state == OnObbStateChangeListener.ERROR_COULD_NOT_MOUNT){ 
      Log.i("OBB", "THIS IS THE ERROR I GET"); 
     } 
    }})) 
{ 
    Log.i("OBB", "Attempting to mount"); 
} else { 
    Log.i("OBB", "Mount failed"); // this isn't happening 
} 

これの最終的な結果は次のとおりです。

E/MountService(2004): Couldn't mount OBB file: -1 
I/OBB  (21219): onObbStateChange:Path [/mnt/sdcard/out.obb] State=21 
I/OBB  (21219): THIS IS THE ERROR I GET 

誰もがこれですべての問題を参照してください?それは動作するように見えます!

注:

ObbInfo info = ObbScanner.getObbInfo("/sdcard/out.obb"); // this returns expected info, so the file is there and able to be read. 

編集:から私はandroid.permission.WRITE_EXTERNAL_STORAGEを持っているし、また、私が期待される情報を取得リンクアンドロイド・デベロッパー・グループの質問here

答えて

1

にあなたは(仮想デバイスをフォーマットする必要がありますdevice-mapperデバイス)を作成してから、マウントすることができます。

具体的には、VolumeManager :: mountObb()にこれをいくつか追加する必要があります。

if (Fat::format(dmDevice, 0)) { 
    SLOGE("OBB FAT format failed (%s)", strerror(errno)); 
    return -1; 
} 

これはおそらくアンドロイドのバグですか?

+0

obbはすでにmkobb.shステップでフォーマットされているはずです。このスクリプトでは、mkfs.vfatを呼び出します。第2に、すべてのマウントでobbをフォーマットすると、マウントするたびにデータが消去されます。しかし、返信をありがとう。 – user931366

+0

まず、スクリプト(mkfs.vfat)を使用してフォーマットされたデバイスは、Linuxマシンのデバイスであり、Androidのデバイスではありません(電話など)。第二に、私はあいまいさのために申し訳なく思っています。私は仮想デバイスを一度しかフォーマットしないでください。 – user1482130

関連する問題