Android OBB / ZIP加载(cocos2dx)

时间:2013-09-02 12:17:43

标签: 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总是为null(如果我是对的,这意味着它无法加载)。我想念的是什么人?

非常感谢提前

(ps:包在那里,我正在使用正确的路径)

3 个答案:

答案 0 :(得分:10)

所以,我终于设法解决了我的问题,这比我想象的容易。 我没有使用c ++源代码修改,而是在Cocos2dxHelper java类中找到了一个nativeSetApkPath函数。在调查了它的使用后,结果发现Cocos2dx将apk包作为zip文件处理。因为我的obb毕竟只是一个重命名的zip文件,所以我可以毫无问题地使用它。除声音外,我的所有资产都装得很好。这需要另一个快速解决方案。

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

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

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

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

我要提到的最后一件事是文件夹结构。我复制并压缩了资产文件夹,所以我的zip文件中有一个文件夹。哪个好,因为apk工作方式相同,我不得不做更多修改。

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

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

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

答案 1 :(得分:1)

请注意,我在ttf中保留assets/个字体文件,因为Cocos2dxTypefaces使用原生AssetManagerapk加载{{1}}文件码。

答案 2 :(得分:1)

版本2.x只是我的意见。 3.x无效Cocos2dxHelper.java