我开发了Android应用,它使用加密的obb文件。这个obb文件由3个文件组成(我用jobb工具创建它)。在大多数设备上都可以,但在三台设备上有ERROR_COULD_NOT_MOUNT。我不明白如何解决它。我想分发应用程序没有任何错误:)请帮助我做! :)
我尝试过: 1)卸载并挂载obb文件; 2)从没有“只读”属性的文件夹创建obb文件。 但所有这些都行不通。
重现问题的步骤(如果适用,还包括示例代码)。 1)创建文件夹,将3个不同的文件放入其中。 2)从步骤1的文件夹中创建obb文件。 3)尝试从应用程序安装此文件(下面的示例代码)。
final File mainFile = new File(Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName + "/" + "main." + versionCode + "." + packageName + ".obb"); OnObbStateChangeListener listener = new OnObbStateChangeListener() { @Override public void onObbStateChange(String path, int state) { super.onObbStateChange(path, state); if (state == OnObbStateChangeListener.MOUNTED) { doNextSteps(); } else if (state == OnObbStateChangeListener.ERROR_COULD_NOT_MOUNT) { Toast.makeText(getApplicationContext(), "ERROR_COULD_NOT_MOUNT", Toast.LENGTH_LONG).show(); } } }; if (!storageManager.isObbMounted(mainFile.getAbsolutePath())) { storageManager.unmountObb(mainFile.getAbsolutePath(), true, listener); storageManager.mountObb(mainFile.getAbsolutePath(), "password_string", listener); } else { doNextSteps(); }
发生了什么事。 我在以下设备上出现“ERROR_COULD_NOT_MOUNT”错误: 1)HTC PJ401 One S; 2)三星GT-I9505 Galaxy S IV; 3)三星SM-N9005 Galaxy Note 3。 但在三星SM-N900T Galaxy Note 3和三星GT-I9500 Galaxy S IV上都可以。
答案 0 :(得分:2)
所以,经过我所有的调查,我可以说。我所要做的就是解决方法。我已经通过
从这3个文件中创建了一个文件copy / B file1 + file2 + file3 result_file.obb
然后我将此文件用作非加密的obb。经过所有这些操作后,一切运行良好。
答案 1 :(得分:1)
我发现某些obb文件无法挂载的原因。 make obb文件时有一个随机的solt,一个由PBKDF2WithHmacSHA1生成的hashkey。从字节转换为十六进制字符串的hashkey有一个bug。我向项目提交补丁:platform / framwork / base。
https://android-review.googlesource.com/#/c/230280/
我修改了jobb工具。添加检查hashkey以跳过生成的错误密钥。在Android合并补丁之前,您可以使用此补丁。此补丁还修复了转储文件错误。