2012-08-23 44 views
5

Tôi đã tự hỏi liệu mọi người có thành công trong việc tạo/gắn các tệp OBB được mã hóa (Opaque Binary Blob) trong Android không? Đây là một theo dõi này question 1: What is OBB(Opaque Binary Blob) in Android develop site?, sau sự chỉ đạo trong bài mà tôi thực hiện như sau (từ ICS 4,01 ban đầu, thử cả trên Ubuntu 10.10-32bit và Ubuntu 12.4-64bit):Sử dụng các tệp OBB được mã hóa trong 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/ 

Từ đây tôi sao chép tệp out.obb vào/sdcard/trên điện thoại của tôi. Và gắn kết với đoạn mã sau:

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 
} 

Kết quả cuối cùng của việc này là:

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 

Bất cứ ai nhìn thấy bất kỳ vấn đề với điều này? Có vẻ như nó sẽ hoạt động!

Lưu ý: Tôi có android.permission.WRITE_EXTERNAL_STORAGE và tôi cũng nhận được thông tin dự kiến ​​từ:

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

Chỉnh sửa: Link vào nhóm Android Developer câu hỏi here

Trả lời

1

Bạn nên định dạng thiết bị ảo (thiết bị ánh xạ thiết bị) được tạo bằng tệp obb (out.obb) đầu tiên và sau đó bạn có thể gắn kết nó.

Để đặt nó cụ thể, bạn nên thêm một số mã như thế này trong VolumeManager :: mountObb().

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

Có thể đây là lỗi dành cho Android?

+0

obb phải được định dạng với bước mkobb.sh, trong tập lệnh đó, nó gọi là mkfs.vfat. Thứ hai, nếu bạn định dạng obb trên mọi gắn kết, bạn sẽ xóa dữ liệu của mình mỗi khi bạn gắn kết nó! Cảm ơn vì lời đáp sâu sắc. – user931366

+0

Đầu tiên, thiết bị được định dạng bằng cách sử dụng tập lệnh (mkfs.vfat) thực sự là thiết bị trong máy Linux KHÔNG phải là thiết bị trong Android (ví dụ: điện thoại của bạn). Thứ hai, tôi xin lỗi vì sự mơ hồ, tôi có nghĩa là bạn nên định dạng thiết bị ảo chỉ ONCE, sau đó bạn có thể gắn kết nó như bình thường. – user1482130

Các vấn đề liên quan