文档章节

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

xu_yanfeng
 xu_yanfeng
发布于 2016/09/21 15:52
字数 803
阅读 57
收藏 0

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/u/2374688/blog/edit/494212

xu_yanfeng
粉丝 0
博文 23
码字总数 26286
作品 0
郑州
程序员
私信 提问
cocos2dx学习日志(一) 总之先弄个能跑的apk出来吧!

新年新气象,新的一年已经开始好一阵子了。本着人在江湖,技多不压身的原则,最近的开始利用业余时间学习cocos2dx游戏引擎开发,话说自己写个游戏那是我儿时的梦想,哈。 废话不多说直接进正...

soso_fy
2014/02/26
0
0
Cocos2dx游戏开发系列笔记1:一个崭新的开始,cocos2dx2.2+ndkr9+Cygwin

Android开发者做cocos2dx最大的绊脚石,不是c++,而是环境的搭建... 骨头也是费了半天劲才终于在真机上看到了那个类似猕猴桃的头,这里简单记录一下。 环境:(算比较新了2013.11.17) coco...

懒骨头
2013/12/09
390
0
Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

感谢听D同学赞助的Demo。 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2toolsproject-creator文件夹中的create_project.py脚本,生成一个demo。 2 拷贝Classes和Resources文件夹到刚生成的d...

懒骨头
2013/12/09
1K
0
Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应

上节说到cygwin下成功编译出so文件,下面我们要把游戏运行在android上。 开始干活! 其实步骤可以参考 Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上 1 用eclipse打...

懒骨头
2013/12/09
287
0
cocos2dX之一——安卓环境搭建

cocos2dx是什么就不多解释,直接进入正题。 传闻cocos2dx的主要开发力量在中国,所以必须得要支持啊。 假定已经有了诸如vs2012以上版本,安卓sdk,ndk环境已经搭建完毕,只说如何建立cocos2d...

tnjin
2015/01/28
73
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis Plus删除

/** @author beth @data 2019-10-17 00:30 */ @RunWith(SpringRunner.class) @SpringBootTest public class DeleteTest { @Autowired private UserInfoMapper userInfoMapper; /** 根据id删除......

一个yuanbeth
今天
4
0
总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
今天
5
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
今天
4
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部