cocos2dx项目eclipse中引入多个so库解决方案

前端之家收集整理的这篇文章主要介绍了cocos2dx项目eclipse中引入多个so库解决方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

eclipse在编译的时候,会主动删除我们拷贝在libs下的so库

如何引入第三方so库: http://bbs.csdn.net/topics/390397961

如何编译多个so库: http://www.jb51.cc/article/p-zteaamdj-kg.html

参考了以上回答,给出我具体的解决步骤:

我们先看一下我的Android.mk:

LOCAL_PATH:=$(callmy-dir)
#模块开头include$(CLEAR_VARS)模块结束include$(BUILD_XXX)
#模块1
include$(CLEAR_VARS)#清除LOCAL_PATH以外的所有LOCAL_XXX变量
LOCAL_MODULE:=libsmsprotocol
LOCAL_SRC_FILES:=	prebuilt/$(TARGET_ARCH_ABI)/libsmsprotocol.so
include$(PREBUILT_SHARED_LIBRARY)
#模块2
include$(CLEAR_VARS)#清除LOCAL_PATH以外的所有LOCAL_XXX变量
LOCAL_MODULE:=libmegjb
LOCAL_SRC_FILES:=	prebuilt/$(TARGET_ARCH_ABI)/libmegjb.so
include$(PREBUILT_SHARED_LIBRARY)
#模块3
include$(CLEAR_VARS)
$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d)
$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
$(callimport-add-path,$(LOCAL_PATH)/../../cocos2d/iconv)
LOCAL_MODULE:=cocos2dcpp_shared
LOCAL_MODULE_FILENAME:=libcocos2dcpp
#配置自己的源文件目录和源文件后缀名
MY_FILES_PATH:=$(LOCAL_PATH)\
$(LOCAL_PATH)/../../Classes
MY_FILES_SUFFIX:=%.cpp%.c
#递归遍历目录下的所有的文件
rwildcard=$(wildcard$1$2)$(foreachd,$(wildcard$1*),$(callrwildcard,$d/,$2))
#获取相应的源文件
MY_ALL_FILES:=$(foreachsrc_path,$(MY_FILES_PATH),$(src_path),*.*))
MY_ALL_FILES:=$(MY_ALL_FILES:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_SRC_LIST:=$(filter$(MY_FILES_SUFFIX),$(MY_ALL_FILES))
MY_SRC_LIST:=$(MY_SRC_LIST:$(LOCAL_PATH)/%=%)
#去除字串的重复单词
defineuniq=
$(evalseen:=)
$(foreach_,$1,$(if$(filter$_,${seen}),$(evalseen+=$_)))
${seen}
endef
#递归遍历获取所有目录
MY_ALL_DIRS:=$(dir$(foreachsrc_path,*/)))
MY_ALL_DIRS:=$(calluniq,$(MY_ALL_DIRS))
#赋值给NDK编译系统
LOCAL_SRC_FILES:=	$(MY_SRC_LIST)
LOCAL_C_INCLUDES:=$(MY_ALL_DIRS)\
LOCAL_C_INCLUDES:=$(LOCAL_PATH)/Classes					
			
LOCAL_WHOLE_STATIC_LIBRARIES:=cocos2dx_static
LOCAL_WHOLE_STATIC_LIBRARIES+=cocosdenshion_static
#LOCAL_WHOLE_STATIC_LIBRARIES+=libiconv
#LOCAL_WHOLE_STATIC_LIBRARIES+=Box2d_static
#LOCAL_WHOLE_STATIC_LIBRARIES+=cocosbuilder_static
#LOCAL_WHOLE_STATIC_LIBRARIES+=spine_static
#LOCAL_WHOLE_STATIC_LIBRARIES+=cocostudio_static
#LOCAL_WHOLE_STATIC_LIBRARIES+=cocos_network_static
#LOCAL_WHOLE_STATIC_LIBRARIES+=cocos_extension_static
include$(BUILD_SHARED_LIBRARY)
#include$(BUILD_STATIC_LIBRARY)表示编译成静态库
#include$(BUILD_SHARED_LIBRARY)表示编译成动态库。
#include$(BUILD_EXECUTABLE)表示编译成可执行程序
$(callimport-module,.)
$(callimport-module,audio/android)
#$(callimport-module,iconv)
#$(callimport-module,Box2D)
#$(callimport-module,editor-support/cocosbuilder)
#$(callimport-module,editor-support/spine)
#$(callimport-module,editor-support/cocostudio)
#$(callimport-module,network)
#$(callimport-module,extensions)

如果通读完上边的网址,可以发现,其实cocos2dx也是作为一个模块来编译的,既然如此,那么我们就把第三方的so库,也作为模块使用 ,使用的MK写法为:

include$(CLEAR_VARS)#清除LOCAL_PATH以外的所有LOCAL_XXX变量,模块开始
LOCAL_MODULE:=libsmsprotocol#模块的名字,可随意
#so库相对于Android.mk文件所在目录的路径,$(TARGET_ARCH_ABI)会智能的选择当前平台,指定多平台,可修改Application.mk
LOCAL_SRC_FILES:=	prebuilt/$(TARGET_ARCH_ABI)/libsmsprotocol.so
include$(PREBUILT_SHARED_LIBRARY)#模块结束

这样,一个模块就好了,如果多个模块,依次类推,所以可以猜到,cocos2dx,也是其中的一个模块,为什么,因为当我尝试着这么写的时候,出现了这个错误

错误的写法:
include$(CLEAR_VARS)
LOCAL_MODULE:=libmegjb
LOCAL_SRC_FILES:=	prebuilt/$(TARGET_ARCH_ABI)/a.so
LOCAL_SRC_FILES+=	prebuilt/$(TARGET_ARCH_ABI)/b.so
include$(PREBUILT_SHARED_LIBRARY)
错误log:
23:12:34****IncrementalBuildofconfigurationReleaseforprojectfish****
pythonE:/project/fish/branchHeGameOld/proj.android/build_native.py-breleaseall
E:/android/android-ndk-r9d/build/core/prebuilt-library.mk:28:***missingseparator. Stop.
AndroidNDK:ERROR:jni/Android.mk:smsprotocol:   
Traceback(mostrecentcalllast):
make.exe:Enteringdirectory`E:/project/fish/branchHeGameOld/proj.android'

分析:很熟悉的错误,是mk写法有问题,好像是分隔符的问题,是不是TAB或者空格的数量不对,插到最后,发现不是这里的原因,其实答案在红字已经给出来了,所以我大胆推测,cocos2dx也是其中的一个模块,再结合之前的文章更是印证了这个猜测。好了,编译完美通过,有什么问题,大家可以留言,至于这个mk文件,大家可以留着,毕竟经过了项目检验,问题少。

猜你在找的Cocos2d-x相关文章