1. 从https://github.com/NewYuil/libpomelo 获得代码,放在 cocos2droot/cocos2dx/platform/third_party/android/prebuilt 下面,与其他文件夹整齐排列。目前只有这里的libpomelo是可以不修改在ndk下编译过的。但是里面bug还是挺多的。
修改里面的 deps/jansson/jansson_config.h.in => deps/jansson/jansson_config.h
这个h里面很好配置,我就不写了。
src/network.c里面有几个地方需要改
pc__on_tcp_connect函数内:
把if(status == -1){} 内的log代码全注释掉,因为req已经被free了,这里又使用。
pc__on_notify函数内:
把if(status == -1){} 内的log代码全注释掉,原因同上。
然后如果PomeloClient.connect("127.0.0.1",port) (这里是伪代码) 如果地址写的是127.0.0.1,我发现在我的android手机上每次都会crash。
查了下死在libuv里的事件循环。由于一般不会connect到127.0.0.1,我就没有深究了。
crash的定位方法写在后面。
2.修改你的cygwin目录下的cygwin.bat,为以后开发提供path支持。
我的是:
@echo off
d:
chdir d:\cygwin\bin
set DRIVER=/cygdrive/d
set ANDROID_SDK=%DRIVER%/software/android-sdk-windows
set VIM_HOME=%DRIVER%/kin-tools/gvim/vim/vim73
set ANT_HOME=%DRIVER%/ws_eclipse/ant/apache-ant-1.9.0
set NDK_ROOT=%DRIVER%/software/android-ndk-r8d-windows
set NDK_TOOLCHAINS_0=%NDK_ROOT%/toolchains/arm-linux-androideabi-4.7/prebuilt/windows/arm-linux-androideabi/bin
set NDK_TOOLCHAINS_1=%NDK_ROOT%/toolchains/arm-linux-androideabi-4.7/prebuilt/windows/bin
set NDK_TOOLCHAINS=%NDK_TOOLCHAINS_0%;%NDK_TOOLCHAINS_1%;
set extpath=%ANDROID_HOME%/tools;%ANT_HOME%/bin;%ANDROID_SDK%/platform-tools;%ANDROID_SDK%/tools;%VIM_HOME%
set extpath=%NDK_TOOLCHAINS%;%extpath%
set path=%extpath%;%path%
set cc_root=%DRIVER%/software/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2
set cc_pomelo_android=%cc_root%/cocos2dx/platform/third_party/android/prebuilt
set ws_proj=%cc_root%/projects/PomeloClientDemo/proj.android
set ws_proj_so=%ws_proj%/obj/local/armeabi/libcocos2dcpp.so
set addr2line=%NDK_TOOLCHAINS_1%/arm-linux-androideabi-addr2line
set objdump=%NDK_TOOLCHAINS_1%/arm-linux-androideabi-objdump
bash --login -i
cd $ws_proj;
执行编译:
./build_native.sh
运气好的话,so就编译成功了。
运气不好的话,可能是你的android项目的版本太低,至少要是android-2.3.3。否则会有线程锁相关的类没有被定义,barrier什么的那个。
4.so编译成功后,就生成apk测一下吧
cd $ws_proj;
ant debug install; 安装到默认的android设备。
5.运行前打开logcat
adb logcat -c && adb logcat
6.运行你的程序吧
如果so里crash了。 可以使用 addr2line 或者 objjump。
本来想写一下的,网上教程已经很多了,还是算了。