cocos2dx assets根目录录取失败

2015年01月16日 10:56 0 点赞 0 评论 更新于 2025-11-21 14:32

在使用Cocos2d-x进行开发时,可能会遇到Assets根目录创建失败的问题,本文将结合具体案例详细分析该问题的成因及可能的解决办法。

问题背景

本人是Cocos2d-x的初学者,在开发过程中遇到了Assets根目录创建失败的困扰。以下是我的开发环境和操作步骤:

  • 开发环境
  • Android NDK版本:android-ndk-r9d
  • Cocos2d-x版本:cocos2d-x-3.0rc0
  • 操作步骤
    1. 按照这篇博客的指引,配置Python环境变量。
    2. 使用cocos new命令新建工程。
    3. 使用cocos run命令编译并执行工程。

在链接手机进行测试时,第一次运行较为顺利。之后进行了如下操作:

  1. 修改了CPP文件中的字符串(如“Hello World”),编译并运行,一切正常。
  2. 从网上下载了一张尺寸为570 * 355的PNG图片,直接将其放入assets文件夹中,未修改任何文件,也未使用该资源。再次执行cocos run -p android命令时,出现报错,并且assets文件夹被自动删除,其中的所有资源(包括原来的图片)都丢失了。

问题原因分析

1. Cocos2d-x工程资源编译机制

在Cocos2d-x工程中,assets目录是编译生成的。追加的资源应放置在Resources目录下,编译时这些资源会自动复制到assets目录。当执行cocos run命令时,会先删除assets目录,然后重新载入资源。

2. 直接修改assets目录资源的问题

如果直接修改assets目录中的资源,可能会引发WindowsError: [Error 5]错误。网上有观点认为这是Python权限问题,不过在此暂不深入探究。

错误日志分析

以下是执行cocos run -p android命令时的详细错误日志:

D:\\Cocos2dxDemo\\HelloNew2dx>cocos run  -p android
D:\\Cocos2dxDemo\\HelloNew2dx>python D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py run  -p android
Runing command: compile
Building mode: debug
building native
The Selected NDK toolchain version was 4.8 !
running: 'D:\\android-ndk-r9d\\ndk-build -j4 -C D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android -j1 NDK_MODULE_PATH=D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d;D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/cocos;D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/external'

Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 9 in ./AndroidManifest.xml
Android NDK: WARNING:D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/cocos/2d/Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
Android NDK: WARNING:D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\../cocos2d/cocos/2d/platform/android/Android.mk:cocos2dxandroid_static: LOCAL_LDLIBS is always ignored for static libraries
make.exe: Entering directory `D:/Cocos2dxDemo/HelloNew2dx/proj.android'
[armeabi] Install        : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
make.exe: Leaving directory `D:/Cocos2dxDemo/HelloNew2dx/proj.android'
building apk
Android platform not specified, searching a default one...
android-19 is found
Traceback (most recent call last):
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py", line 578, in <module>
run_plugin(command, argv, plugins)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py", line 558, in run_plugin
dependencies_objects[dep_name] = run_plugin(dep_name, argv, plugins)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/cocos.py", line 560, in run_plugin
plugin.run(argv, dependencies_objects)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/project_compile.py", line 636, in run
self.build_android()
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/project_compile.py", line 140, in build_android
builder.do_build_apk(sdk_root, ant_root, android_platform, build_mode, output_dir)
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/build_android.py", line 125, in do_build_apk
self._copy_resources()
File "D:\\cocos2d-x-3.0rc0\\tools\\cocos2d-console\\bin/../plugins/project_compile/build_android.py", line 172, in _copy_resources
os.mkdir(assets_dir)
WindowsError: [Error 5] : 'D:\\Cocos2dxDemo\\HelloNew2dx\\proj.android\\assets'

从日志中可以看出,错误发生在执行os.mkdir(assets_dir)时,提示WindowsError: [Error 5],这表明在尝试创建assets目录时遇到了权限问题。

解决建议

对于像我这样的新手,在使用Cocos2d-x开发时,应遵循其资源管理机制,将追加的资源放置在Resources目录下,避免直接修改assets目录中的资源,以防止出现类似的权限问题。

希望以上分析能为遇到相同问题的开发者提供一些帮助,如果你有更好的解决办法,欢迎交流分享。