Android OBB/ZIP加载(cocos2dx)

Lug*_*oiy 4 c++ android 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);
}
Run Code Online (Sandbox Code Playgroud)

但是pData var总是为null(如果我是对的,这意味着它无法加载).我想念的是什么人?

提前谢谢了

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

Lug*_*oiy 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/
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 自我注意:确保您的zip文件在zip中包含作为root的'assets'文件夹,而不是整个路径结构/ $ HOME/path/to/proj/assets / (3认同)
  • 我用你的答案工作了几个小时,我想建议每个人检查`AndroidManifest.xml`:`<uses-permission android:name ="android.permission.READ_EXTERNAL_STORAGE"/>`其他地方都没有用. (2认同)