Загрузка Android OBB/ZIP (cocos2dx)

У меня проблема с расширениями APK. На стороне Java я мог настроить все, что должен был установить, но, похоже, я не могу правильно изменить код на стороне С++.

Внутри функции 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 всегда нулевая (если я прав, это означает, что ее не удалось загрузить). Чего мне не хватает, ребята?

Спасибо заранее

(ps: пакет есть, и я использую правильный путь)


person LugaidVandroiy    schedule 02.09.2013    source источник


Ответы (3)


Итак, мне наконец удалось решить мою проблему, и это оказалось намного проще, чем я думал. Вместо того, чтобы идти с модификациями исходного кода С++, я нашел функцию в классе java Cocos2dxHelper, которая является nativeSetApkPath. После изучения его использования выяснилось, что Cocos2dx обрабатывает пакет apk как zip-файл. Поскольку мой obb — это просто переименованный zip-файл, я могу использовать его без каких-либо проблем. Все мои активы были загружены нормально, кроме звуков. Что требует еще одного быстрого исправления.

Большая часть заслуг принадлежит сообщению на форуме (http://www.cocos2d-x.org/boards/6/topics/11243) и Ирвину Биллингу, так как это была база, которую я мог использовать для своих модификаций в классах 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

person LugaidVandroiy    schedule 11.09.2013
comment
Примечание для себя: убедитесь, что ваш zip-файл содержит папку «assets» в качестве корня внутри zip-архива, а не всю структуру пути /$HOME/path/to/proj/assets/ - person Steve T; 07.10.2013
comment
Привет, LugaidVandroiy. Я пытаюсь сделать то же самое, но использую Cocos2d. Не могли бы вы указать мне, какой файл соответствует Cocos2dxHelper.java в Cocos2d. Я очень новичок в Cocos2d и очень мало знаю об этом. Спасибо - person Sushil; 28.11.2013
comment
Привет! Насколько я знаю, Cocos2d-x — это проект, отличный от оригинального Cocos2d и Cocos2d-iphone. Какую именно версию вы используете? Я мог бы помочь, может быть. - person LugaidVandroiy; 28.11.2013
comment
@LugaidVandroiy .. Я использую Cocos2d для Android. Я мог понять, что в contentHelper.java мне нужно правильно установитьExternalLoader(). Но не умею. Будет очень признателен, если вы можете дать мне несколько советов или помочь в этом отношении. Спасибо еще раз - person Sushil; 29.11.2013
comment
Я работал с вашим ответом часами и хочу предложить всем проверить AndroidManifest.xml: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> в другом месте ничего не работает. - person ricky.tribbia; 22.08.2014

Просто примечание: я оставляю ttf файлы шрифтов в assets/, потому что Cocos2dxTypefaces загружаю их из AssetManager (файл apk) с использованием собственных кодов.

person lk_vc    schedule 16.05.2014

Версия 2.x это только мое мнение. 3.x не работает Cocos2dxHelper.java работает.

person jangyuk    schedule 11.09.2014
comment
Есть ли это решение в cocos2dx 3.x? Пожалуйста помоги. - person jangyuk; 11.09.2014