Android系统。加载复杂的加密obb文件时出现ERROR_COULD_NOT_MOUNT

时间:2013-11-11 08:17:06

标签: android

我开发了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上都可以。

2 个答案:

答案 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合并补丁之前,您可以使用此补丁。此补丁还修复了转储文件错误。

https://android-review.googlesource.com/#/c/231431/