Android 从Nexus设备上装载的obb文件读取的损坏数据

Android 从Nexus设备上装载的obb文件读取的损坏数据,android,corruption,Android,Corruption,我们有一个跨平台的移动应用程序,它使用本机C库读取一些数据(以及其他内容)。在Android上,数据位于一个obb文件中,我们使用扩展APK机制获取该文件。这对我们来说非常有效。然而,我们发现,在第二代(2013年)Nexus 7表和Nexus 5手机上,我们正在从已损坏的obb读取一些数据。实际的obb文件没有损坏,但我们从中读取的是 我拥有的最好的例子是WebView从装载的obb读取HTML文件。HTML的第一部分会很好,然后在第二部分会有胡言乱语。有趣的是,这种胡言乱语可以识别为obb中

我们有一个跨平台的移动应用程序,它使用本机C库读取一些数据(以及其他内容)。在Android上,数据位于一个obb文件中,我们使用扩展APK机制获取该文件。这对我们来说非常有效。然而,我们发现,在第二代(2013年)Nexus 7表和Nexus 5手机上,我们正在从已损坏的obb读取一些数据。实际的obb文件没有损坏,但我们从中读取的是

我拥有的最好的例子是WebView从装载的obb读取HTML文件。HTML的第一部分会很好,然后在第二部分会有胡言乱语。有趣的是,这种胡言乱语可以识别为obb中其他地方的二进制数据。这几乎就像读取obb的Android代码将块映射弄错一样

我把它缩小到由一些从obb读取对象的C代码触发。如果我把它注释掉,当我以后访问它时,HTML就可以了。现在有可能在C代码中有bug,但是这个库已经在另外两个平台上使用,没有问题。它在第一代Nexus 7和其他非Nexus设备上也可以正常工作


有没有人想过这会是什么?在这些Nexus设备上,Android 4.3.x和Android 4.4.x似乎都会出现这种情况。哪些不同的硬件可能导致这种损坏?我假设像C库这样的东西是Android自带的,并且没有以某种方式内置到固件中?

我遇到了完全相同的问题,在使用stdio函数从本机C库中的OBB读取时,随机损坏了资产。装载的OBB中128字节的段始终损坏。数据中的任何更改都会移动字节段,导致另一个资产被损坏。这只是运行O/S v.4.4.x(KitKat)和v.5.x.x(棒棒糖)的手机的问题,据我所知,运行6.x.x(棉花糖)和更高版本的手机不受影响

为了避免这种情况,我没有挂载.obb,而是使用了如下所述的alternate.zip方法:


我只是简单地将数据打包到一个.zip文件中,并进行0压缩(store),重命名为.obb,然后将其上传到GooglePlay。当用户第一次启动应用程序时,我使用APK扩展Zip库将文件解压缩到外部存储,然后直接读取文件,而不是通过挂载。这导致应用程序的大小是手机上的两倍,但总比在某些系统上由于数据损坏而完全崩溃要好

我对这个问题没有得到任何回应。此后,我几乎可以肯定地证明,这是第二代Nexus上装载的obb文件中的一个bug。我可以将其缩小到JNI中导致损坏的2字节的简单fread。向Android开发者报告这一点的最佳方式是什么?理想情况下,我希望与他们进行对话,询问可能的解决方法。我不确定这是否相关,但在我的情况下,我正在从SD卡(我的应用程序创建的)上拖动一个zip文件,在某些情况下,该文件在从SD卡上拖动的过程中会损坏。它在设备上没有损坏,因为我可以读到android Zip API没有问题,只是当我把它从设备上拖下来的时候。如果我通过文件管理器应用程序将其传输到网络共享,则一切正常且未损坏。当然,这似乎是某个地方的设备问题!顺便说一句,我使用的是nexus 7 4.4.4。我用cocos2d-x制作的游戏也遇到了同样的问题,当安装OBB文件时,应用程序会在ressource加载时随机崩溃。有人能克服这个错误吗?我在Nexus 5和HTC One M8设备上有完全相同的症状…OBB MD5校验和很好…除了这两个设备外,它在几乎所有设备上都能正常工作…但是在这两个型号上,从OBB读取的一些文件都被损坏了。你在这方面有什么进展吗?或者你决定停止使用官方的OBB格式吗?是的,我们也改用扩展APK机制。为了投入我的两分钱,我在生产过程中遇到了同样的问题,没有选择扩展.OBB(将导致1gb存储与500mb存储)的选项,结果非常棘手。神奇地解决了这个问题,将.obb与jobb重新打包,而不更改参数(内容已更改),看起来它可能只是一个间歇性的jobb错误?或者使用某些obb布局安装bug。我对任何经历过这种情况的人的建议是找到一个发生这种情况的设备(在我的例子中是Nexus5和4.4.X),然后重建obb,希望它能够自行修复。。。