您的位置:首页 > 移动开发 > Cocos引擎

移动sdk接入问题总结(cocos2dx项目eclipse中引入多个so库解决方案)

2015-08-18 00:00 531 查看
eclipse在编译的时候,会主动删除我们拷贝在libs下的so库

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

如何编译多个so库: http://blog.csdn.net/lubeijing2008xu/article/details/8131757

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

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

LOCAL_PATH := $(call my-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)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
$(call import-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) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))
# 获取相应的源文件
MY_ALL_FILES := $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(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)/%=%)
# 去除字串的重复单词
define uniq =
$(eval seen :=)
$(foreach _,$1,$(if $(filter $_,${seen}),,$(eval seen += $_)))
${seen}
endef
# 递归遍历获取所有目录
MY_ALL_DIRS := $(dir $(foreach src_path,$(MY_FILES_PATH), $(call rwildcard,$(src_path),*/) ) )
MY_ALL_DIRS := $(call uniq,$(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 
4000
;$(BUILD_SHARED_LIBRARY)表示编译成动态库。
#include $(BUILD_EXECUTABLE)表示编译成可执行程序
$(call import-module,.)
$(call import-module,audio/android)
#$(call import-module,iconv)
#$(call import-module,Box2D)
#$(call import-module,editor-support/cocosbuilder)
#$(call import-module,editor-support/spine)
#$(call import-module,editor-support/cocostudio)
#$(call import-module,network)
#$(call import-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 **** Incremental Build of configuration Release for project fish ****
python E:/project/fish/branchHeGameOld/proj.android/build_native.py -b release all
E:/android/android-ndk-r9d/build/core/prebuilt-library.mk:28: *** missing separator.  Stop.
Android NDK: ERROR:jni/Android.mk:smsprotocol:    
Traceback (most recent call last):
make.exe: Entering directory `E:/project/fish/branchHeGameOld/proj.android'

分析:很熟悉的错误,是mk写法有问题,好像是分隔符的问题,是不是TAB或者空格的数量不对,插到最后,发现不是这里的原因,其实答案在红字已经给出来了,所以我大胆推测,cocos2dx也是其中的一个模块,再结合之前的文章更是印证了这个猜测。好了,编译完美通过,有什么问题,大家可以留言,至于这个mk文件,大家可以留着,毕竟经过了项目检验,问题少。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: