移动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:
如果通读完上边的网址,可以发现,其实cocos2dx也是作为一个模块来编译的,既然如此,那么我们就把第三方的so库,也作为模块使用 ,使用的MK写法为:
这样,一个模块就好了,如果多个模块,依次类推,所以可以猜到,cocos2dx,也是其中的一个模块,为什么,因为当我尝试着这么写的时候,出现了这个错误:
分析:很熟悉的错误,是mk写法有问题,好像是分隔符的问题,是不是TAB或者空格的数量不对,插到最后,发现不是这里的原因,其实答案在红字已经给出来了,所以我大胆推测,cocos2dx也是其中的一个模块,再结合之前的文章更是印证了这个猜测。好了,编译完美通过,有什么问题,大家可以留言,至于这个mk文件,大家可以留着,毕竟经过了项目检验,问题少。
如何引入第三方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文件,大家可以留着,毕竟经过了项目检验,问题少。
相关文章推荐
- [Cocos2d-x][消除游戏实战][1][了解游戏]
- cocos-2dx OPENGL渲染(1)
- cocos 绑定到lua时指定命名空间 程序崩溃
- Cocos2d-x学习笔记(十二)—— Box2d物理引擎(未完)
- cocos2dx 记录
- Cocos2d-x实现Android的Toast特征
- cocos2d-x学习笔记(二)序列帧动画实现的几种方法
- (转载)我所理解Cocos2d-x 3.6(Lua):Cocos如何绑定Lua自定义类
- 14、Cocos2dx 3.0三,找一个小游戏开发Scene and Layer:游戏梦想
- cocos2dx-3.x lua绑定
- cocos2d-x在Android真机上使用Sqlite数据库
- cocos自定义类 绑定到lua
- Cocos2dx播放mp4文件(IOS和Android)
- COCOS2D-JS的屏幕适配方案
- CocoStudio:ImageView分析
- [转]cocos2dx中用外部浏览器打开url
- Cocos2d-x能够实现的效果总结
- Agar 流体效果的 Cocos2d-JS 实现
- Cocos2dx_背景层循环滚动
- 在cocos2d-x在CCTableView使用控制