Android OBB/ZIP 加载 (cocos2dx)

标签 android c++ android-ndk cocos2d-x apk-expansion-files

我在处理 APK 扩展时遇到问题。在 Java 端,我可以设置我应该设置的所有内容,但似乎我无法在 C++ 端正确修改代码。

CCFileUtilsAndroid::getFileData 函数内部:

if (fullPath[0] != '/')
{
   CCLOG("GETTING FILE RELATIVE DATA: %s", fullPath.c_str());
   pData  = CCFileUtils::sharedFileUtils()->getFileDataFromZip("/storage/sdcard0/Android/obb/com.example.package/main.1.com.example_package.obb", fullPath.c_str(), pSize);
}

但是 pData var 始终为空(如果我是对的,这意味着加载失败)。我想念什么伙计们?

提前致谢

(ps:包在,我用的是对的路径)

最佳答案

所以,我终于设法解决了我的问题,而且比我想象的要容易得多。 我没有进行 c++ 源修改,而是在 Cocos2dxHelper java 类中找到了一个函数,即 nativeSetApkPath。查了一下使用方法,原来Cocos2dx是把apk包当成zip文件来处理的。由于我的obb毕竟只是一个重命名的zip文件,所以我可以毫无问题地使用它。除了声音,我所有的 Assets 都加载得很好。这需要另一个快速修复。

大部分归功于论坛帖子 (http://www.cocos2d-x.org/boards/6/topics/11243) 和 Irwin Billing,因为这是我可以用于修改 Cocos2dxMusic.java 和 Cocos2dxSound.java 类的基础。

另外,我必须确保声音 Assets 没有压缩在 zip 文件中(根据 Google 提供的文档)。

为此,我在我的 Mac 上使用了以下命令:

zip -rn .ogg:.mp3:.wav assets.zip assets/

我最后要提的是文件夹结构。我复制并压缩了 assets 文件夹,所以我的 zip 文件中有一个文件夹。这很好,因为 apk 的工作方式相同,我不必再做任何修改。

最后我修改了源文件,只是不要忘记浏览它,并更改一些值 Cocos2dxHelper.java: http://pastebin.com/RqeYkTkP

Cocos2dxMusic.java: http://pastebin.com/RXjwmEyb

Cocos2dxSound.java: http://pastebin.com/1GfDB6jb

关于Android OBB/ZIP 加载 (cocos2dx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573096/

相关文章:

android - 导出 mupdf 和 android studio 0.5.4

android - 为什么 Facebook 应用程序 ID 突然失效?

android - 我的 NFC Reader 无法成功读取正确的数据

c++ - OpenMP STL 集容器迭代器

c++ - 从 num1 到 num2 的最短路径(在 C++ 中)

c++ - static_cast void* char* 与 static_cast void** char**

android - 如何修改 Android 交叉工具链的默认 lib 链接(不使用 libc++ 和 libm 进行链接)

android - 崩溃 : Thread SIGBUS 0x0000000054f1f000

android - 为什么没有调用微调器中的 onNothingSelected?

android - 以编程方式启用 USB Tethering Android,无需用户交互