[原创]COCOS2DX 3.8 增加protobuf为external库
此处为记录防止忘记,最近使用COCOS练习一些新的库,所以需要把PROTOBUF编译进去,看上去很麻烦,这里记录一下,以防忘记。
首先下载protobuf 2.5.0版本,下载地址请自行百度。
准备工作:
CYGWIN下载:http://cygwin.com/setup-x86.exe
1、请确保机器中有CYGWIN,并且CYGWIN必须安装好GCC,GDB和MAKE等,文章很多,请自行搜索
2、配置CYGWIN的NDK环境:
打开CYGWIN目录下的home\Administrator\.bash_profile,并在最下面添加内容:
NDK=/cygdrive/J/android-ndk-r10d
export NDK
重启CYGWIN,测试执行:cd $NDK ,此处NDK环境配置完毕
3、确保安装好COCOS2DX最新版
4、曾经使用过PROTOBUF,本文非PROTOBUF教程,为配置引导教程。
编译PROTOBUF ANDROID
解压缩PROTOBUF文件至COCOS目录,注意:为了防止文件混乱建议最好在COCOS根目录下新建名为THRDLIB的目录存放PROTOBUF。
解压后用WINDOWS版本先编译,如果出现MIN和MAX函数错误,只需要在:src\google\protobuf\io 目录下找到 zero_copy_stream_impl_lite.cc 文件,在文件头部增加 INCLUDE:#include <algorithm>,此处BUG修复,请安心兼容ANDROID。
(建议:请先新建一份COCOS的DEMO游戏,并将WINDOWS版本的PROTOBUF放入引用,新建对应的测试协议,确保在WINDOWS一切正常)
编译ANDROID版本步骤:
1、进入PROTOBUF解压所在目录
2、新建JNI目录,进入该目录
3、新建文件:Application.mk
内容:
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti
APP_ABI := armeabi armeabi-v7a x86
解释:此处ABI为兼容COCOS的3中情况,分别编译3中类型的库,稍后会提供配置方式。
4、新建文件:Android.mk
内容:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := protobuf_static LOCAL_MODULE_FILENAME := protobuf LOCAL_SRC_FILES :=src/google/protobuf/io/coded_stream.cc \
src/google/protobuf/stubs/common.cc \
src/google/protobuf/descriptor.cc \
src/google/protobuf/descriptor.pb.cc \
src/google/protobuf/descriptor_database.cc \
src/google/protobuf/dynamic_message.cc \
src/google/protobuf/extension_set.cc \
src/google/protobuf/extension_set_heavy.cc \
src/google/protobuf/generated_message_reflection.cc \
src/google/protobuf/generated_message_util.cc \
src/google/protobuf/io/gzip_stream.cc \
src/google/protobuf/compiler/importer.cc \
src/google/protobuf/message.cc \
src/google/protobuf/message_lite.cc \
src/google/protobuf/stubs/once.cc \
src/google/protobuf/compiler/parser.cc \
src/google/protobuf/io/printer.cc \
src/google/protobuf/reflection_ops.cc \
src/google/protobuf/repeated_field.cc \
src/google/protobuf/service.cc \
src/google/protobuf/stubs/structurally_valid.cc \
src/google/protobuf/stubs/strutil.cc \
src/google/protobuf/stubs/substitute.cc \
src/google/protobuf/text_format.cc \
src/google/protobuf/io/tokenizer.cc \
src/google/protobuf/unknown_field_set.cc \
src/google/protobuf/wire_format.cc \
src/google/protobuf/wire_format_lite.cc \
src/google/protobuf/io/zero_copy_stream.cc \
src/google/protobuf/io/zero_copy_stream_impl.cc \
src/google/protobuf/io/zero_copy_stream_impl_lite.cc \
src/google/protobuf/stubs/stringprintf.cc LOCAL_EXPORT_C_INCLUDES :=
LOCAL_EXPORT_LDLIBS := LOCAL_C_INCLUDES := $(LOCAL_PATH) \
$(LOCAL_PATH)/src LOCAL_LDLIBS := \
-llog \
-lz include $(BUILD_STATIC_LIBRARY)
5、回到上一级目录,将SRC目录整个拷贝至JNI目录下。
6、打开CYGWIN,进入PROTOBUF目录下(访问WINDOWS目录方法为:cd /cygdrive/f/protobuf)
7、输入:
$NDK/ndk-build
静静的等待安装完毕。
将protobuf安装至external目录
编译完毕protobuf后,我们开始安装对应的文件。
步骤如下(以COCOS2DX 3.8为例):
1、进入COCOS框架目录下:Cocos\Framework\frameworks\cocos2d-x-3.8\external
2、新建目录protobuf
3、在目录下新建 include 以及 prebuilt 目录 ,此处开始较为重要
4、将PROTOBUF目录下的src目录下的.h文件拷贝至COCOS框架下的external/protobuf/include目录下(注意COPY完毕后,其相对路径会是:external\protobuf\include\google)。
5、进入external/protobuf/prebuilt,新建目录android(如已经编译好WIN32版本,请直接新建WIN32目录,并COPY lib文件至该目录下)
6、回到PROTOBUF编译目录下的obj\local目录下,拷贝目录下的3个文件夹:armeabi、armeabi-v7a、x86 至COCOS框架目录下的:external/protobuf/prebuilt/android目录下,并记得删除每个目录内的obj文件夹,保留.a文件,别删错噢。
7、在external/protobuf/prebuilt/android目录下新建文件:Android.mk
内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS)
LOCAL_MODULE := protobuf_static
LOCAL_MODULE_FILENAME := libprotobuf
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libprotobuf.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include
include $(PREBUILT_STATIC_LIBRARY)
8、进入COCOS的cocos2d-x-3.8\cocos\prebuilt-mk目录下 打开文件 Android.mk 文件,请务必使用NOTEPAD++或UE等工具打开,否则可能排版混乱
9、修改该文件内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dx_internal_static LOCAL_MODULE_FILENAME := libcocos2dxinternal ifeq ($(USE_ARM_MODE),)
LOCAL_ARM_MODE := arm
endif ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
MATHNEONFILE := math/MathUtil.cpp.neon
else
MATHNEONFILE := math/MathUtil.cpp
endif LOCAL_SRC_FILES := ..\..\prebuilt\android/$(TARGET_ARCH_ABI)/libcocos2dxinternal.a LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/.. \
$(LOCAL_PATH)/../. \
$(LOCAL_PATH)/../.. \
$(LOCAL_PATH)/../platform \
$(LOCAL_PATH)/../base \
$(LOCAL_PATH)/../../external \
$(LOCAL_PATH)/../../external/tinyxml2 \
$(LOCAL_PATH)/../../external/unzip \
$(LOCAL_PATH)/../../external/chipmunk/include/chipmunk \
$(LOCAL_PATH)/../../external/xxhash \
$(LOCAL_PATH)/../../external/nslog \
$(LOCAL_PATH)/../../external/poly2tri \
$(LOCAL_PATH)/../../external/poly2tri/common \
$(LOCAL_PATH)/../../external/poly2tri/sweep \
$(LOCAL_PATH)/../../external/clipper LOCAL_EXPORT_LDLIBS := -lGLESv2 \
-llog \
-landroid LOCAL_WHOLE_STATIC_LIBRARIES := cocos_freetype2_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_png_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_jpeg_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_tiff_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_webp_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_chipmunk_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_zlib_static
LOCAL_WHOLE_STATIC_LIBRARIES += recast_static
LOCAL_WHOLE_STATIC_LIBRARIES += bullet_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dxandroid_static # define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -DUSE_FILE32API
LOCAL_CFLAGS += -fexceptions
LOCAL_CPPFLAGS := -Wno-deprecated-declarations -Wno-extern-c-compat
LOCAL_EXPORT_CFLAGS := -DUSE_FILE32API
LOCAL_EXPORT_CPPFLAGS := -Wno-deprecated-declarations -Wno-extern-c-compat include $(PREBUILT_STATIC_LIBRARY) #============================================================== include $(CLEAR_VARS) LOCAL_MODULE := cocos2dx_static
LOCAL_MODULE_FILENAME := libcocos2d
LOCAL_SRC_FILES := ..\..\prebuilt\android/$(TARGET_ARCH_ABI)/libcocos2d.a LOCAL_WHOLE_STATIC_LIBRARIES := cocostudio_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocosbuilder_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos3d_static
LOCAL_WHOLE_STATIC_LIBRARIES += spine_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
LOCAL_WHOLE_STATIC_LIBRARIES += audioengine_static
#此处增加额外的POTOBUF库文件
LOCAL_WHOLE_STATIC_LIBRARIES += protobuf_static include $(PREBUILT_STATIC_LIBRARY)
#==============================================================
$(call import-module,freetype2/prebuilt/android)
$(call import-module, platform/android/prebuilt-mk)
$(call import-module,png/prebuilt/android)
$(call import-module,zlib/prebuilt/android)
$(call import-module,jpeg/prebuilt/android)
$(call import-module,tiff/prebuilt/android)
$(call import-module,webp/prebuilt/android)
$(call import-module,chipmunk/prebuilt/android)
$(call import-module, 3d/prebuilt-mk)
$(call import-module, audio/android/prebuilt-mk)
$(call import-module, editor-support/cocosbuilder/prebuilt-mk)
$(call import-module, editor-support/cocostudio/prebuilt-mk)
$(call import-module, editor-support/spine/prebuilt-mk)
$(call import-module, network/prebuilt-mk)
$(call import-module, ui/prebuilt-mk)
$(call import-module, extensions/prebuilt-mk)
$(call import-module, Box2D/prebuilt-mk)
$(call import-module, bullet/prebuilt-mk)
$(call import-module, recast/prebuilt-mk)
$(call import-module,curl/prebuilt/android)
$(call import-module,websockets/prebuilt/android)
$(call import-module, flatbuffers/prebuilt-mk)
#此处增加额外的PROTOBUF库
$(call import-module, protobuf/prebuilt/android)
至此,可以在COCOS STUDIO中尝试编译你的项目至ANDROID,PROTOBUF应该已经在里面了,而且不管新建几个项目,都会自动包含,不用另外配置。
此处额外分享一套自动搜索CPP,C以及CC文件的MK内容,不必挨个增加编译文件噢(适用于大部分COCOS项目,几乎不必修改任何内容,新增CPP也会编译在内,非常方便噢)。
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp # 遍历目录及子目录的函数
define walk
$(wildcard $()) $(foreach e, $(wildcard $()/*), $(call walk, $(e)))
endef # 遍历Classes目录
ALLFILES = $(call walk, $(LOCAL_PATH)/../../Classes) FILE_LIST := hellocpp/main.cpp
# 从所有文件中提取出所有.cpp文件
FILE_LIST += $(filter %.cpp, $(ALLFILES))
FILE_LIST += $(filter %.cc, $(ALLFILES))
FILE_LIST += $(filter %.c, $(ALLFILES)) LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
#LOCAL_SRC_FILES += $(LOCAL_PATH)/../../libs/protobuf/android/$(TARGET_ARCH_ABI)/libprotobuf.a # 修改include路径
FILE_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)
LOCAL_C_INCLUDES := $(FILE_INCLUDES) #LOCAL_SRC_FILES := hellocpp/main.cpp \
# ../../Classes/AppDelegate.cpp \
# ../../Classes/HelloWorldScene.cpp
# ../../Classes/ LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../libs/protobuf/include LOCAL_CFLAGS := -v # _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END LOCAL_STATIC_LIBRARIES := cocos2dx_static
LOCAL_STATIC_LIBRARIES += libprotobuf # _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END include $(BUILD_SHARED_LIBRARY) $(call import-module,./prebuilt-mk) # _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
[原创]COCOS2DX 3.8 增加protobuf为external库的更多相关文章
- cocos2d-x lua 中使用protobuf并对http进行处理
cocos2d-x lua 中使用protobuf并对http进行处理 本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链 ...
- [cocos2dx笔记004] android添加�静态库project
(基于2.2.2版本号) 这步比較麻烦,不像vs2013那样好设置.參考了非常多文章.还是不能解决这个问题.仅仅有慢慢摸索了.在这里贴出来,希望能让大家能少走点弯路. 还是其于前面的文章提到的myli ...
- 【转载】cocos2dx 中 Android NDK 加载动态库的问题
原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...
- cocos2dx 3.x 集成protobuf
vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程也可参考. 主要参考博文地址<cocos2dx 3.x C++搭建protobuf环 ...
- 【转】cocos2dx 3.x 集成protobuf
http://www.cnblogs.com/chevin/p/6001872.html vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程 ...
- [原创]cocos2d-x研习录-第三阶 背景音乐和音效
在游戏中,音效是一个不可或缺的部分,它可以为我们的游戏增加效果.音效在游戏中一般分为长时间的背景音乐和短促的特效音乐.Cocos2D-x支持多种常见音乐格式(mp3.wav等). Cocos2D-x提 ...
- [原创]cocos2d-x研习录-第三阶 特性之触屏
游戏跟视频最大的区别就是互动,而手游(基于智能手机)主要靠触摸屏幕.重力传感和虚拟键盘等方式实现互动.这里主要记录Cocos2D-x对玩家触屏操作的处理. 在Cocos2D-x中触屏分为单点触屏和多点 ...
- [原创]cocos2d-x研习录-第二阶 概念类之场景类(CCScene)
场景类CCScene是Cocos2D-x在屏幕显示的内容,相当于游戏关卡或界面.CCDirector任何时候只能显示一个场景CCScene,游戏中可能存在若干场景,CCDirector通过场景切换达到 ...
- [原创]cocos2d-x研习录-第三阶 多分辨率适配器
在移动终端(智能手机)平台下开发游戏一般都会涉及到屏幕多分辨率适配问题,原因是手机款式多种多样,不同的款式存在有不同的尺寸,即使尺寸相同又可能存在不同的分辨率. 手机屏幕尺寸:指手机屏幕对角线长度. ...
随机推荐
- Zookeeper--配置服务
Zookeeper--配置服务 配置服务是分布式应用中重要的服务,作用是使集群中的机器可以共享配置信息中公共的部分.ZooKeeper可作为一个具有高可用,全局一致的配置服务器,允许客户端获取和更新配 ...
- css怎么设置2个div同行,第一个固定宽度,第二个占满剩余的部分
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Jquery学习小计
实时监听输入框值变化 首先创建Jquery.fn扩展 jQuery.fn.extend({ inputChange: function(callback){ if($.support.leadingW ...
- 007:MySQL SSL
一. SSL安装 SSL(Secure Socket Layer)是维护Client - Server之间加密通讯的一套安全协议: --默认ssl未开启 mysql> show variable ...
- 前段基础之HTML
HTML 初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s ...
- Android APP压力测试实战
环境准备: Android SDK Python 压测实战步骤 1.在手机开发者工具中,将USB调试选上 2.确认手机,电脑成功连接(通过adb devices) 3.安装测试app(adb in ...
- mac jmeter安装
1. 下载jmeter: 2. 通过cmd进入jmeter的bin目录: 3. 在cmd中输入:./jmeter.sh 4. 启动完成.
- mongodb(二)
数据准备: var persons = [{ name:"jim", age:25, email:"75431457@qq.com", c:89,m:96,e: ...
- 直接用SQL语句把DBF导入SQLServer
直接用SQL语句把DBF导入SQLServer 在SQLServer中执行 SELECT * into bmk FROM OpenDataSource( ’Microsoft.Jet.OLEDB. ...
- 对称加密——对入参进行DES加密处理
体验更优排版请移步原文:http://blog.kwin.wang/programming/symmetric-encryption-des-js-java.html 对称加密是最快速.最简单的一种加 ...