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

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 $(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文件,大家可以留着,毕竟经过了项目检验,问题少。

转载于:https://my.oschina.net/tidyboy/blog/749715

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值