cocos2dx android中使用boost
最近由于项目需要将mac下开发的游戏,移植到安卓安卓平台(项目中使用第三方静态库也需要编译进来),简单的把过程记录一下.
中间就涉及到几点
1).配置cocos2d-x 的android环境.
cocos2dx安卓环境搭建
http://blog.csdn.net/doublefi123/article/details/8811023
http://blog.csdn.net/aa4790139/article/details/8086635
这两篇博文对前面怎么来配置,以及一系列的工具如何使用做了详细的介绍,这里我就大概说一下,有需要可以进去详细的看看,在此也感谢一下博主.
大致是
a.下载安装android sdk、ndk、cygwin,然后并对其进行配置(这里要提一下的是在安装cygwin建议使用最新版本,不然有坑.因为在选择下载相关lib地址后发现有x86与64两个版本,这样会导致老版本的cygwin会无法下载成功)
b.编辑cocos2dx目录下的create-android-project.bat文件(这个是针对cocos2dx-2.1.4之前版本,因为后续版本改变使用python来生成模版项目,后面会介绍)
这里要补充的是,当我将cocos2dx换到2.2.1版本后,最后b步骤就会发现无法完成了,因为会找不到create-android-project.bat文件了....所以需要做相应的调整,详细的这里我也提供一篇博文供大家了解http://www.cppblog.com/zdhsoft/archive/2013/11/06/cocos2dx.html
中间的思路基本上是一致的,也就是使cygwin在编译的时候能找到需要使用的工具就行了.
2).编译使用boost for android.
在这个里面编译的时候,下载boost库并将其通过ndk编译出需要使用静态库(.a文件),这个在我编译时使用了,网上比较多的一种方式在编译之前打上了很多人提及到的补丁(其实也就是对相关源码针对android添加了部分的宏已经少量代码,可参考 https://github.com/MysticTreeGames/Boost-for-Android),但是在使用之后我发现生成的库中没有thread库(libboost_thread-gcc-mt-s-1_53.a),而正好我的需要使用这个库.然后在尝试后发现,当不打补丁进行编译就可以正常生成(暂时未发现大的问题,如果有知道无补丁影响的同学可以告知一下,可参考http://www.codexperiments.com/android/2011/05/tips-tricks-building-boost-with-ndk-r5/)
3).修改编写Android.mk 使用Cygwin对源码进行编译生成动态库.so文件 供安卓生成使用.
a.将编译好的boost库文件的.a文件与boost 拷贝到cocos2d-x-2.2.1\cocos2dx\platform\third_party\android\prebuilt\libboost中
b.其他可参考libcurl中编写Android.mk,在libboots中Android.mk如下
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) LOCAL_MODULE := cocos_boost_system_static LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libboost_system-gcc-mt-s-1_53.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := cocos_boost_thread_pthread_static LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libboost_thread_pthread-gcc-mt-s-1_53.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS) LOCAL_MODULE := cocos_boost_date_time_static LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libboost_date_time-gcc-mt-s-1_53.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_STATIC_LIBRARY)
c.修改开发项目中的proj.android\jni文件夹中的Android.mk
添加:
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_boost_system_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_boost_thread_pthread_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_boost_date_time_static
$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libboost)
(可参考http://www.cppblog.com/sunicdavy/archive/2013/07/20/201993.html)