2012-08-23 14 views
5

Me preguntaba si las personas han tenido éxito en la creación/montaje de archivos encriptados OBB (Opaque Binary Blob) en Android? Esta es una continuación de este question 1: What is OBB(Opaque Binary Blob) in Android develop site?, siguiendo la dirección en que post que ejecuta la siguiente (de ICS 4.01 línea de base, probamos tanto en Ubuntu 10.10-32bit y Ubuntu 12.4-64bit):Usando archivos OBB encriptados en Android

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/ 

Desde aquí, copio el archivo out.obb en/sdcard/en mi teléfono. Y el monte con el siguiente código:

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 
} 

El resultado final de esto es:

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 

Alguien ve algún problema con esto? ¡Parece que debería funcionar!

Nota: Tengo android.permission.WRITE_EXTERNAL_STORAGE y también consigo información prevista a partir de:

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

Editar: Enlace a Android-desarrollador pregunta grupo here

Respuesta

1

Usted debe formatear el dispositivo virtual (device-mapper device) que se creó con el archivo obb (out.obb) primero, y luego puede montarlo.

Para ponerlo concretamente, debe agregar un código como este en VolumeManager :: mountObb().

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

Quizás esto es un error para android?

+0

El obb ya debe estar formateado con el paso mkobb.sh, en ese script llama a mkfs.vfat. En segundo lugar, si formatea el obb en cada montura, ¡borrará sus datos cada vez que lo monte! Gracias por la respuesta. – user931366

+0

En primer lugar, el dispositivo que se formateó con la secuencia de comandos (mkfs.vfat) en realidad es el dispositivo en la máquina Linux NO el dispositivo en Android (por ejemplo, su teléfono). En segundo lugar, lamento la ambigüedad, me refiero a que debe formatear el dispositivo virtual solo UNA VEZ, luego puede montarlo como de costumbre. – user1482130

Cuestiones relacionadas