5

我开发了使用加密 obb 文件的 Android 应用程序。这个 obb 文件由 3 个文件组成(我用 jobb 工具创建的)。在大多数设备上一切正常,但在三个设备上存在 ERROR_COULD_NOT_MOUNT。而且我不明白如何解决它。我想分发应用程序没有任何错误:) 请帮我做!:)

我尝试过: 1)卸载并安装obb文件;2)从没有“只读”属性的文件夹创建obb文件。但是这一切都行不通。

重现问题的步骤(如果适用,包括示例代码)。 1)创建文件夹,放入3个不同的文件。2) 从步骤 1 中的文件夹创建 obb 文件。 3) 尝试从应用程序挂载此文件(示例代码如下)。

 

    最终文件 mainFile = new File(Environment.getExternalStorageDirectory() + "/Android/obb/" + packageName + "/"
                    +“主要”。+ 版本代码 + "." + 包名 + ".obb");
    OnObbStateChangeListener 监听器 = 新 OnObbStateChangeListener() {
        @覆盖
        公共无效 onObbStateChange(字符串路径,int 状态){
            super.onObbStateChange(路径,状态);
            如果(状态 == OnObbStateChangeListener.MOUNTED){
                做下一步();
            } 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);
    } 别的 {
        做下一步();
    }

发生了什么。 我在以下设备上出现“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 上一切正常。

4

2 回答 2

2

所以,经过我所有的调查,我可以说。我所能做的就是解决方法。我已经从这 3 个文件中创建了一个文件

复制 /B file1+file2+file3 result_file.obb

然后我将此文件用作非加密 obb。毕竟这些操作都运作良好。

于 2014-02-11T13:09:28.757 回答
2

我发现某些obb文件无法挂载的原因。制作obb文件时有一个随机的solt,一个由PBKDF2WithHmacSHA1生成的hashkey。从字节转换为十六进制字符串的哈希键有一个错误。我向项目提交了一个补丁:平台/框架/基础。

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

我修改了jobb工具。添加检查 hashkey 以跳过生成的错误密钥。在安卓合并补丁之前,可以使用这个补丁。此补丁还修复了转储文件错误。

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

于 2016-05-20T07:28:55.593 回答