2014.7.26 为cocos2d-x3.2版本增加protobuffer2.5.0支持

为cocos2d-x3.2版本增加protobuffer2.5.0支持(win32&android)

因为不想排版 所以这里只有文字 可以下载word版观看:点击下载

作用:添加protobuffer支持后,可以利用protobuffer特性来序列化和反序列化二进制数据流。

软件准备:cocos2d-x3.2, protobuffer2.5.0,protoc-2.5.0-win32, vs2012, anroid相关环境(SDK, NDK , CYGWIN等)

Setp1:新建cocos2d-x 3.2项目

安装完成cocos2d-x3.2 配置好环境变量,利用命令新增项目

命令 “cocos new ProtobufferDemoWithLib -p com.jcracker.ProtobufferDemoWithLib -l cpp -d/”

创建成功界面:

Setp2:复制protobuffer2.5源码到cocos2d-x文件夹

模仿external模块。将protobuffer文件复制到external中。

Setp3:打开ProtobufferDemoWithLib项目,

添加libprotobuffer依赖

Setp4:Win32平台直接编译通过

Setp4:用protobuf-win32提供的protoc.exe生成测试.proto的.pb.h .pb.cc(建议将protoc.exe复制到c盘的system32中,方便一点)

Setp5:编写proto文件并生成pb.h和pb.cc

生成pb.h和pb.cc

命令“protoc TestName.proto --cpp_out.”

Setp5:修改pb.cc和pb.h后缀(主要是android平台的AL_CPP_EXTENSION选项不支持具有两个小数点的后缀,形如”.pb.cc”),同时修改头文件包含中的后缀

可以看到 其中头文件“#include <google/protobuf/stubs/common.h>

”均找不到文件。所以设置项目的头文件路径到protobuffer

显示正常

编译通过

Setp5:在HelloWorldScene.cpp中编写测试代码

编译运行

至此 win32平台protobuffer库添加完成。

下面进行android平台protobuffer添加

Setp1:先直接编译未添加protobuffer支持的android

用eclipse导入

Setp2:解决问题,此类问题 很多 百度之

找不到gen是因为没设置一个选项

先注释掉在win32平台上添加的 TestName,保证最原始的android能编译通过

碰到这个错误 记得复制一份源码就可以解决,解决方法如下:

将它复制一份到

Ok 搞定

Eclipse中编译运行 构建成功

Setp3:为protobuffer编写Android.mk

原文如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

TARGET_CPU_ABI := armeabi

#TARGET_CPU_ABI := armeabi-v7a

#TARGET_CPU_ABI := armeabi-v7a-hard

#TARGET_CPU_ABI := armeabi

#设置c++11头文件路径和链接路径

prebuilt_stdcxx_PATH := E:\android-ndk-r9d-windows-x86_64\android-ndk-r9d\sources\cxx-stl\gnu-libstdc++\4.8

LOCAL_C_INCLUDES += \

$(prebuilt_stdcxx_PATH)/include \

$(prebuilt_stdcxx_PATH)/libs/$(TARGET_CPU_ABI)/include

LOCAL_LDFLAGS += -L$(prebuilt_stdcxx_PATH)/libs/$(TARGET_CPU_ABI) -lgnustl_static -lsupc++

LOCAL_MODULE := protobuf_static

LOCAL_MODULE_FILENAME := libprotobuf

LOCAL_CPP_EXTENSION := .cc

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/stubs/stringprintf.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

#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/protobuf

#LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/protobuf

#LOCAL_CFLAGS := -std=c99

#LOCAL_CFLAGS += -std=c++11 -stdlib=libstdc++ -Wno-error=c++11-narrowing

include $(BUILD_STATIC_LIBRARY)

Setp4:打开项目的android.mk 添加 protobuffer相关

原文如下:

LOCAL_PATH := $(call my-dir)

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)

LOCAL_MODULE := cocos2dcpp_shared

LOCAL_MODULE_FILENAME := libcocos2dcpp

LOCAL_SRC_FILES := hellocpp/main.cpp \

../../Classes/AppDelegate.cpp \

../../Classes/HelloWorldScene.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static

# 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

LOCAL_WHOLE_STATIC_LIBRARIES += protobuf_static

include $(BUILD_SHARED_LIBRARY)

$(call import-module,.)

$(call import-module,audio/android)

# $(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)

$(call import-module,external/protobuf-2.5.0)

Setp5:cygwin中进入protobuffer 运行./configure && make && make install产生config.h

必须保证全部正常 否则后面会出现依赖问题

这里如果出现错误 比如缺少包 工具 请运行cygwin setup.exe 选择internet模式 添加

如果出现找不到google/protobuf头文件之类的。 将protobuffer中src下的所有.h拷贝一份 放到ndk的平台相关目录中:

开始编译protobuffer

链接 出现这种错误

是因为我们头文件是用的gun stl 因此去修改 Application.mk 中的APP_STL为gunstl_static即可

原文如下:

APP_STL := gnustl_static

NDK_TOOLCHAIN_VERSION=clang

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char

APP_LDFLAGS := -latomic

APP_DEBUG := $(strip $(NDK_DEBUG))

ifeq ($(APP_DEBUG),1)

APP_CPPFLAGS += -DCOCOS2D_DEBUG=1

APP_OPTIM := debug

else

APP_CPPFLAGS += -DNDEBUG

APP_OPTIM := release

Endif

再次编译成功

Setp6: 打开win32平台的测试代码,android.mk中添加编译部分

成功被编译

运行在小米3上 出现JCracker TestName

这里截图不方便  就不放图了

接下来 做序列化和反序列化

TODO IOS支持

2014.7.26 为cocos2d-x3.2版本增加protobuffer2.5.0支持,布布扣,bubuko.com

时间: 2024-10-23 17:10:24

2014.7.26 为cocos2d-x3.2版本增加protobuffer2.5.0支持的相关文章

##老版本项目-&gt;Xcode7+Swift2.0项目改动可能遇到的问题 &gt; 维护者:PMST &gt; 最后更新日期:2015.6.26 &gt; 版本号:V1.0.0 &gt; Note:倘若

老版本项目->Xcode7+Swift2.0项目改动可能遇到的问题 维护者:PMST 最后更新日期:2015.6.26 版本号:V1.0.0 Note:倘若你的项目转换到swift2.0语法,或多或少会遇到一些问题,该文档因此诞生.鼓励大家一起参与进来,帮助国内Swift的开发和维护. github项目所属:swift2.0_PlaygroundStudyNote 团队博客地址:Optional Swift 个人博客地址:Colourful Code Error Information How

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7

Oracle升级_oracle 10g版本由 10.2.0.4.0升级为10.2.0.4.4(即PSU升级)

***************************************************************************************************** 续借上篇:Oracle升级_oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0(即CPU升级) ***********************************************声明***************************************

TalkingData游戏版本在Cocos2d-x 3.0使用

Cocos2dx在3.0的版本中改动确实不少啊,所以导致原来可以在Cocos2.x版本上的demo都不能直接用,所以不得不重要写一个新的demo 但是TalkingData的库一直都是可以用的,只是之前的demo不能运行. =====为了打包的大小新的Demo中没有cocos2d这个库,下载后可以copy一份,或者直接引用cocos的文件下面的库==== 一.先来看一下在Cocos3.0上用脚本生成的工程的整个目录结构. 包括android和ios的内容,注意:在生成工程的时候,会把cocos的

Oracle升级_oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0(即CPU升级)

CPU升级_ oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0 ***********************************************声明************************************************ 原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong). 表述有错误之处,请您留言,不胜感激. 提醒:点击目录,更有

AutoMapper 9.0快速上手,从老版本迁移到9.0+AutoMapper9.0和Autofac的完美结合

.NET模型映射器AutoMapper 9.0发布了,官方宣称不再支持静态方法调用了,老版本的部分API将在升级到9.0后,直接升级包到9.0会编译报错,所以写篇文章记录下AutoMapper新版本的学习过程吧,如果还不知道AutoMapper是什么的,建议先看这篇文章:https://masuit.com/156,或者参考官方文档:https://automapper.readthedocs.io/en/latest/Getting-started.html AutoMapper9.0快速上手

无废话版本-Asp.net MVC4.0 Rasor的基本用法

最近工作有点忙,好久没写东西了!废话不多说了,进入主题! 1.在页面中输出单一变量时候,只要在C#语句之前加上@符号即可,For example: <p>Now Time:@DateTime.Now</p> 请注意,上述example中虽然使用C#语言撰写代码,但输出单一变量的时候,不需要加上分号: 2.在页面上输出一段含有空白字元或者运算子的结果时,必须在前后加上一个小括号,For example: <p> UserName:@(User.Identity.Name+

STL源码剖析---根据最新版本的g++4.9.0(支持C++11)的修订(1)空间配置器

源码剖析采用的G++版本为2.91.57版本,是比较老的版本与最新版本4.9.0有某些方面的差别.现在我针对最新版本做一个分析.我下载了最新的gcc-4.9.0的包作为观察对象: 我们#include <>时的头文件放在:gcc-4.9.0/libstdc++-v3/include/std:例如vector. 真正的实现文件放在:gcc-4.9.0/libstdc++-v3/include/bits:例如:stl_vector,注意前面的stl_. 最后要说的是:技术是不断进步,不断发展变化的

【翻译自mos文章】在oracle db 11gR2版本中启用 Oracle NUMA 支持

在oracle db 11gR2版本中启用 Oracle NUMA 支持 参考原文: Enable Oracle NUMA support with Oracle Server Version 11gR2 (文档 ID 864633.1) 适用于: Oracle Database - Enterprise Edition - Version 11.2.0.1 and later Oracle Database - Standard Edition - Version 11.2.0.1 and l