对于Cocos2D-Android,估计很多同学都不甚了解,本篇教程将带你详细解读Cocos2D-Android项目的生成与运行中存在的问题。
通过构建了Cocos2d的Android开发和build环境
貌似运行了几个批处理,但实际遇到若干问题,通过分析其内部机制才得以解决
生成项目
运行create-android-project.bat看看此批处理做的事情:
1)用AndroidSDK的android.batcreate生成空eclipse项目
call"%_ANDROIDTOOLS%\\android.bat"createproject-n%_PROJECTNAME%-t%_TARGETID%-k%_PACKAGEPATH%-a%_PROJECTNAME%-p%_PROJECTDIR%\\proj.android
2)用android.batupdate填充项目
call"%_ANDROIDTOOLS%\\android.bat"updateproject-l../../cocos2dx/platform/android/java-p%_PROJECTDIR%\\proj.android
就是把cocos2dx/platform/android/java中的文件(Cocos2dxActivity.java,Cocos2dxBitmap.java,etc.)copy到空项目中
3)复制文件其他项目文件
create-android-project.bat调用了cygwin的脚本去复制文件(cocos2d-2.1rc0-x-2.1.2\\template\\android\\copy_files.sh)
a)复制helloworld
#from Hello World copy src and jni to app_DIR
copy_src_and_jni(){
cp-rf$HELLOWORLD_ROOT/proj.android/jni$APP_DIR/proj.android
cp-rf$HELLOWORLD_ROOT/proj.android/src$APP_DIR/proj.android
#replaceAndroid.mk
sh$COCOS2DX_ROOT/template/android/gamemk.sh$APP_DIR/proj.android/jni/Android.mk$NEED_BOX2D$NEED_CHIPMUNK$NEED_lua
}
还要copybuild_native.sh等等
现在生成的项目结构是
AppHome------Classes(HelloWorldScene.cpp,AppDelegate.cpp.etc)
------proj.android(eclipse的项目结构)
------Resources(helloworld.png.etc)
编译Native
用cygwin进入目录proj.android,而后运行build_native.sh,它做的事情如下:
1)把Resources下的图片copy到proj.android/asset下
2)而后执行ndk-build,目标是运行proj.android/jni/Android.mk
--------------Android.mk---------------
LOCAL_PATH:=$(callmy-dir)
include$(CLEAR_VARS)
LOCAL_MODULE:=game_shared
LOCAL_MODULE_FILENAME:=libgame本module是生成libgame
本module直接包含的文件
LOCAL_SRC_FILES:=hellocpp/main.cpp\\
../../Classes/AppDelegate.cpp\\
../../Classes/HelloWorldScene.cpp
LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../../Classes
LOCAL_WHOLE_STATIC_LIBRARIES:=cocos2dx_staticcocosdenshion_staticcocos_extension_static本module依赖的静态库
include$(BUILD_SHARED_LIBRARY)
$(callimport-module,CocosDenshion/android)\\引入CocosDenshion/android/Android.XML生成cocosdenshion_static
$(callimport-module,cocos2dx)\\引入cocos2dx/Android.xml生成cocos2dx_static(libcocos2d.a)
$(callimport-module,extensions)引入extensions生成cocos_extension_static
如果你看见最后一行buildlog如下:你build成功了
Install:libgame.so=>libs/armeabi/libgame.so
最总生成proj.android/libs/armeabi/libgame.so,包含所有的native
最后在eclipseimport项目就可可以编译了
问题
但可能由于Cocoscopyfiles做得不完善,可能存在若干问题
1)eclipse中org.cocos2dx.lib下面没有看见文件,但用win资源管理器能看到文件,但没有权限打开
可以删除这些,在直接cocos2dx/platform/android/java复制
2)运行create-android-project.bat时,log提示某些目录或文件权限不够
干脆以管理员权限运行
3)有的文件因为权限不够而没有编译,但系统不给错误信息
比如hellocpp/main.cpp,没有编译,运行后Frame大小不对
修改main.cpp权限,再次编译
如果生成项目再出现问题,相信也可以用直接手工copyfile的方法解决了