2014-03-14 77 views
1

我们有一个跨平台移动应用程序,它使用本机库来读取一些数据(除其他外)。在Android上,数据位于使用Expansion APK机制的obb文件中。这对我们来说工作得很好。但是,我们发现在第二代(2013)Nexus 7表和Nexus 5手机上,我们正在读取obb中已损坏的一些数据。实际的obb文件没有被破坏,但我们从中读取的是。在Nexus设备上从挂载的obb文件中读取损坏的数据

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

我已经缩小到由某些C触发的代码从obb中读取对象。如果我对此发表评论,当我稍后访问它时,HTML将会很好。现在有可能在代码中存在错误,但是这个库已经在其他两个平台上使用,没有问题。它也适用于第一代Nexus 7和其他非Nexus设备。

那么,有没有人有任何想法,这可能是什么?这些Nexus设备上的Android 4.3.x和Android 4.4.x似乎都会发生这种情况。什么可能是不同的硬件方面,可能会导致这种腐败?我认为像C库与Android并没有内置到固件的某种?

+0

我对此查询没有任何回应。我已经证明几乎可以肯定,这是第二代Nexus挂载obb文件中的一个错误。我可以将其缩小到JNI中引起损坏的2字节的简单fread。向Android开发者报告这种情况的最佳方式是什么?理想情况下,我希望与他们进行对话以询问可能的解决办法。 – btschumy

+0

我不确定这是否相关,但在我的情况下,我从SD卡(我的应用程序创建的)中拖出一个zip文件,在某些情况下,文件在拖动过程中变为损坏关闭SD卡。它在设备上没有损坏,因为我可以读取的是与Android Zip APIs一样好,只是当我将它从设备上拖出时。如果我通过文件管理器应用程序将它传输到网络共享,那么一切都很好,并且没有损坏。当然,这似乎是一个设备问题!顺便说一下,我正在使用nexus 7 4.4.4。 – Andy

+0

我遇到过使用cocos2d-x制作的游戏时遇到的同样的问题,在安装OBB文件时,应用程序将随着资源加载而随机崩溃。有没有人能够克服这个错误? –

回答

0

我有完全相同的问题,在使用stdio函数的本地C库中从OBB读取时,随机损坏的资产。安装的OBB中的128个字节段一直被破坏。数据中的任何更改都会改变字节段,导致不同的资产被破坏。对于运行O/S v.4.4.x(KitKat)和v.5.x.x(Lollipop)的手机来说,这只是一个问题,运行6.x.x(Marshmallow)的手机并不会影响到据我所知。

为了避免这种情况,而不是安装.obb,我最终使用了如下所示的备用.zip方法:https://developer.android.com/google/play/expansion-files.html

我简单地将数据打包到带有0压缩(存储)的.zip中,重命名为.obb,并将其上传到Google play。当用户首次启动应用程序时,我使用APK Expansion Zip Library将文件提取到外部存储,然后直接读取文件,而不是通过安装。这导致该应用程序在手机上的尺寸是其两倍,但由于数据损坏,最好在某些系统上完全损坏。

+0

是的,我们也切换到使用Expansion APK机制。 – btschumy