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
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
Đầ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