cocos2d-x for Android装配和学习笔记

cocos2d-x for Android安装和学习笔记

(TODO:内容未稳定)

 

一、安装笔记

1. 下载:

下载官方的源码包

http://code.google.com/p/cocos2d-x/downloads/list

 

2. 创建示例工程:

因为官方没有发布编译后的二进制文件,所以要自己编译。

下载的cocos2d-1.0.1-x-0.13.0-beta.zip压缩包里根目录有一个文件叫create-android-project.bat。(还有个.sh后缀的文件,它不能用cygwin运行)

如果直接运行的话可能会报错,说某个目录错误,需要用编辑器(我用的是notepad2)编辑,修改这几个变量:

_CYGBIN:cygwin的bin目录

_ANDROIDTOOLS:android sdk的tools目录

_NDKROOT:ndk的根目录

然后运行,根据提示输入包名、工程名和API级别。

最后会生成一个以工程名命名的目录,

 

3. 编译.so文件

生成的工程目录有三个子目录:

* android:特定于Android平台的工程文件

* Classes:跨平台的C++源文件和头文件

* Resources:公共的资源文件(跨平台)

在cygwin下cd进去(切换到android子目录中),然后执行

./build_native.sh

编译JNI代码。

编完后libs\armeabi下会出现一个1MB左右的libgame.so文件

obj下会生成一堆中间.o文件,应该是没用的。

 

4. 编译apk和安装到手机

 

 

我事先用bat配置好ant的环境变量:

 

 

@set PATH="C:\WINDOWS"
@set PATH="C:\WINDOWS\system32";%PATH%
@set PATH="D:\java\apache-ant-1.8.1\bin";%PATH%

@set JAVA_HOME="D:\java\jdk1.6.0_20"
@set PATH="D:\java\jdk1.6.0_20\bin";%PATH%

@set PATH="D:\java\android-sdk_r10-windows\android-sdk-windows\platform-tools";%PATH%
@set PATH="D:\java\android-sdk_r10-windows\android-sdk-windows\tools";%PATH%
@cd /D "D:\java\android-sdk_r10-windows\android-sdk-windows\work"
@cmd
 

现在开始用ant编译Android工程(先切换到build.xml的目录中)

> ant debug

(也可以执行ant release,可输入ant查看命令行用法)

生成bin\cocostest-debug.apk

然后用91或adb装到手机上即可。

默认界面上只有一张图片,一个Hello World字符串,一个fps值和一个退出按钮。

 

cocos2d-x for Android装配和学习笔记

 

整个过程不需要导入到Eclipse中

 

 

 

 

 

 

二、参考

1. 如何在macox下面配置集成ios和android游戏教程

http://www.cnblogs.com/andyque/archive/2012/02/23/2364163.html

 

2. cocos2d-x初探学习笔记(1)--HelloWorld

http://blog.csdn.net/bill_man/article/details/7202458

 

3. Cocos2D-X官网中文页面

http://cn.cocos2d-x.org/

 

 

 

 

 

 

-------------------------------

(2012/04/23更新)

 

三、独立工具链的编译(不编译依赖库)

(以下对于cocos2d-1.0.1-x-0.13.0-beta)

在(一)中最后会得到几个.a文件。如果不考虑那些库文件的编译,整个.so的编译过程是很简单的。

在ndk-build后面添加V=1的方法打开Makefile的执行输出,可以看到生成.so的关键命令是:

 

 

 写道
arm-linux-androideabi-g++ -Wl,-soname,libgame.so -shared --sysroot=C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/platforms/android-8/arch-arm ./obj/local/armeabi/objs/game_shared/helloworld/main.o ./obj/local/armeabi/objs/game_shared/__/__/Classes/AppDelegate.o ./obj/local/armeabi/objs/game_shared/__/__/Classes/HelloWorldScene.o ./obj/local/armeabi/objs/game_shared/__/__/__/lua/cocos2dx_support/CCLuaEngine.o ./obj/local/armeabi/objs/game_shared/__/__/__/lua/cocos2dx_support/Cocos2dxLuaLoader.o ./obj/local/armeabi/objs/game_shared/__/__/__/lua/cocos2dx_support/LuaCocos2d.o ./obj/local/armeabi/objs/game_shared/__/__/__/lua/cocos2dx_support/tolua_fix.o -Wl,--whole-archive ./obj/local/armeabi/libcocos2dx.a ./obj/local/armeabi/libcocosdenshion.a ./obj/local/armeabi/libbox2d.a ./obj/local/armeabi/liblua.a ./obj/local/armeabi/png.a ./obj/local/armeabi/jpeg.a ./obj/local/armeabi/xml2.a -Wl,--no-whole-archive ./obj/local/armeabi/libgnustl_static.a C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a -Wl,--no-undefined -Wl,-z,noexecstack -LC:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/platforms/android-8/arch-arm/usr/lib -llog -lz -lGLESv1_CM -llog -lc -lm -o obj/local/armeabi/libgame.so
 

如果不考虑lua/cocos2dx_support下的.o文件,而且假设.a文件已经编译好,那么可以简化为以下Makefile(头文件目录进行了调整,而且因为我对ndk的工具链目录也作了调整,所以不需要添加--sysroot开关)

 

 

CC := arm-linux-androideabi-gcc
CPP := arm-linux-androideabi-g++
LD := arm-linux-androideabi-ld
STRIP := arm-linux-androideabi-strip
RM := rm -rf

CPPFLAGS := -g
CPPFLAGS += -DANDROID -I../Classes -I../cocos2dx -I../cocos2dx/include -I../cocos2dx/platform
LDFLAGS := -shared
LIBS := -Wl,--whole-archive ../cocos2dx/lib/libcocos2dx.a ../cocos2dx/lib/png.a ../cocos2dx/lib/jpeg.a ../cocos2dx/lib/xml2.a -Wl,--no-whole-archive ../cocos2dx/lib/libgnustl_static.a -Wl,--no-undefined -Wl,-z,noexecstack -llog -lz -lGLESv1_CM -llog -lc -lm

TARGET := libs/armeabi/libgame.so

OBJS := jni/helloworld/main.o 
OBJS += ../Classes/AppDelegate.o 
OBJS += ../Classes/HelloWorldScene.o

all : $(TARGET)

$(TARGET) : $(OBJS)
	$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
	$(STRIP) --strip-unneeded $(TARGET)	

%.o : %.cpp
	$(CPP) $(CPPFLAGS) -o $@ -c $<
	
clean :
	$(RM) $(OBJS) $(TARGET)

 

可以看到,实际上需要编译的源文件只有三个:

 

Android/jni/helloworld/main.cpp 

Classes/AppDelegate.cpp 

Classes/HelloWorldScene.cpp

 

 

 

四、CDT配置

 

 

1. 修改CDT工程属性

假设

(1) 已编译好的所有.a文件:

libcocos2dx.a

png.a

jpeg.a

xml2.a

libgnustl_static.a

已经复制到

G:/weimingtom_tools/android-ndk-r5b/home/Administrator/cocos2d-x/cocos2dx/lib/

目录中。

(2) NDK目录在

C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b

(3) Android工程的libs\armeabi目录在子目录

android\libs\armeabi

(4) cocos2dx源码在

C:\cygwin\home\Administrator\android-ndk-r7b-windows\android-ndk-r7b\cocos2d


首先在C/C++ build->Configureation:中选择[All configurations],

然后设置以下内容(列表框支持直接粘贴)

(1) New:

C++ Project->Shared Library->Cross-Compile Project

(2) Prefix:

arm-linux-androideabi-

(3) Path:

C:\cygwin\home\Administrator\android-ndk-r7b-windows\android-ndk-r7b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin

(4) Text file encoding:

UTF-8

(5) Make:

C:\cygwin\home\Administrator\android-ndk-r7b-windows\android-ndk-r7b\prebuilt\windows\bin\make

(6) G++ Defined symbols:

ANDROID

(7) G++ Include path:

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/platforms/android-8/arch-arm/usr/include"

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/sources/cxx-stl/gnu-libstdc++/include"

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include"

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/cocos2d/cocos2dx"

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/cocos2d/cocos2dx/include"

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/cocos2d/cocos2dx/platform"

${workspace_loc:/${ProjName}/Classes}

(8) G++ Lib:

log

z

GLESv1_CM

c

m

(9) G++ Lib path:

"C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/platforms/android-8/arch-arm/usr/lib"

(10) -Wl,-soname=

libgame.so

(11) Artifact name:

game

(12) G++ linker linker flags

--sysroot="C:/cygwin/home/Administrator/android-ndk-r7b-windows/android-ndk-r7b/platforms/android-8/arch-arm"

(13) Expert settings:

Command line pattern:

${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} -Wl,--whole-archive "G:/weimingtom_tools/android-ndk-r5b/home/Administrator/cocos2d-x/cocos2dx/lib/libcocos2dx.a" "G:/weimingtom_tools/android-ndk-r5b/home/Administrator/cocos2d-x/cocos2dx/lib/png.a" "G:/weimingtom_tools/android-ndk-r5b/home/Administrator/cocos2d-x/cocos2dx/lib/jpeg.a" "G:/weimingtom_tools/android-ndk-r5b/home/Administrator/cocos2d-x/cocos2dx/lib/xml2.a" -Wl,--no-whole-archive "G:/weimingtom_tools/android-ndk-r5b/home/Administrator/cocos2d-x/cocos2dx/lib/libgnustl_static.a" -Wl,--no-undefined -Wl,-z,noexecstack ${INPUTS}

(14)Build Steps->Post-build steps->Command:

arm-linux-androideabi-strip --strip-unneeded libgame.so && copy libgame.so ..\android\libs\armeabi

2. 如果修改了配置,错误提示仍然没有改变,可尝试:

工程->右键->Index->Rebuild

工程->右键->Refresh

直至错误完全消失

 

3. 编译libgame.so

工程->右键->Build Configurations->Set Active选择Debug还是Release

然后Clean Project, Build Project

 

4. 编译apk

> cd /d C:\Documents and Settings\Administrator\workspace_indigo_sr2\cocostest\android

> ant clean debug install



我喜欢CDT的原因是它支持方法提示、错误警告跳转和定义跳转,但调试功能没有Qt Creator强。如图所示:


cocos2d-x for Android装配和学习笔记
 


 

 


cocos2d-x for Android装配和学习笔记

 

 

 


cocos2d-x for Android装配和学习笔记

 

 

 

 

 

 

(TODO:待补充)