Android 安卓装载复杂的加密obb文件时出现错误\u无法\u装载

Android 安卓装载复杂的加密obb文件时出现错误\u无法\u装载,android,Android,我开发了Android应用程序,它使用加密的obb文件。这个obb文件由3个文件组成(我用jobb工具创建了它)。在大多数设备上都是正常的,但在这三个设备上有一个错误\u cand \u NOT \u MOUNT。我不知道如何修复它。我想发布没有任何错误的应用程序:)请帮助我做到这一点!:) 我尝试过的: 1) 卸载和装载obb文件; 2) 从不带“只读”属性的文件夹创建obb文件。 但这一切都行不通 重现问题的步骤(如果合适,包括示例代码)。 1) 创建文件夹,放入3个不同的文件。 2) 从步

我开发了Android应用程序,它使用加密的obb文件。这个obb文件由3个文件组成(我用jobb工具创建了它)。在大多数设备上都是正常的,但在这三个设备上有一个错误\u cand \u NOT \u MOUNT。我不知道如何修复它。我想发布没有任何错误的应用程序:)请帮助我做到这一点!:)

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

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

final File mainFile=新文件(Environment.getExternalStorageDirectory()++“/Android/obb/“+packageName+”/” +“main.+versionCode+”+packageName+“.obb”); OnobStateChangeListener=新建OnobStateChangeListener(){ @凌驾 公共无效状态更改(字符串路径,int状态){ super.onobstatechange(路径、状态); if(state==onobstateChangeListener.MOUNTED){ doNextSteps(); }else if(state==onobstateChangeListener.ERROR\u COULD\u NOT\u MOUNT){ Toast.makeText(getApplicationContext(),“错误无法装载”,Toast.LENGTH.show(); } } }; 如果(!storageManager.isObbMounted(mainFile.getAbsolutePath())){ storageManager.unmountObb(mainFile.getAbsolutePath(),true,listener); mountObb(mainFile.getAbsolutePath(),“密码字符串”,侦听器); }否则{ doNextSteps(); } 发生了什么事。 我在以下设备上出现“错误\u无法\u装载”错误: 1) HTC PJ401一S; 2) 三星GT-I9505 Galaxy S IV; 3) 三星SM-N9005 Galaxy Note 3。
但在三星SM-N900T Galaxy Note 3和三星GT-I9500 Galaxy S IV上,一切正常。

因此,在我进行了所有调查之后,我可以说。我所能做的就是解决问题。我已经从这3个文件中创建了一个文件

复制/B文件1+文件2+文件3结果\u file.obb


然后我用这个文件作为非加密obb。在所有这些操作之后,一切都很好。

我发现某些obb文件无法装入的原因。生成obb文件时会出现一个随机解决方案,该文件是PBKDF2WithHmacSHA1生成的哈希键。从字节转换为十六进制字符串的哈希键存在错误。我向项目提交了一个补丁:平台/框架/基础

我修改了jobb工具。添加并检查hashkey以跳过生成的错误键。在Android合并补丁之前,您可以使用此补丁。此修补程序还修复了转储文件错误


现在是否已将其合并到最新的jobb工具中? 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(); }