軟件: cocos2d-x版本
protobuffer版本:
NDK版本:
Eclipse:
之前在網上搜索了很多文章,發現大多文章都沒有一個完整的流程,自己摸索了2天,成功添加了protobuffer支持。這裏記錄下同時分享給其他人。
這裏的添加方式雷同於添加cocos2d-x所需要的第三方庫。
1. 利用cocos2d-x提供的python腳本新生成一個項目。(進入cocos2d-x/tools/project-creator, 編寫一個bat腳本用來生成項目 create.bat)
- @echo off
- set /p projectName=Please Input Project name:
- if "%projectName%"=="" goto inputError
- set /p packageName=Please Input Package Name:
- if "%packageName%"=="" goto inputError
- create_project.py -project %projectName% -package %packageName% -language cpp
- pause
- exit
- :inputError
- @echo Project or package name is NULL!
- pause
注意輸入PackageName的時候要使用標準的組織機構如:com.jcracker.test 否則創建可能失敗。
這裏我爲了學習cocos2d-x 所以模仿了9miao的名稱。最終生成的項目組織結果如下:
2. 爲cocos2d-x添加protobuffer支持
將protobuffer源碼複製到cocos2d-x/external下。 如圖:
3. 進入cygwin 生成protobuffer需要的config.h文件,如果不生成在編譯階段會提示找不到config.h錯誤。
進入cygwin, 一路cd到 cocos2d-x/external/protobuf/中 執行./configure 在執行過程中注意觀察 執行情況 必須執行成功才行,過程中如果提起缺少gcc g++之類的 自己重新安裝gcc g++
4. 進入external/chipmunk 複製裏面的Android.mk 到protobuf中。此時protobuf文件組織結構如圖:
5. 改寫Android.mk. 改寫後的Android.mk如下:
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- 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
- include $(BUILD_STATIC_LIBRARY)
編寫以上代碼時候注意記得把protobuffer的cc寫進來。
6. 使用eclipse進如android項目的結構中。
7. 爲protobuffer添加編譯所需的頭文件支持。 因爲protobuffer中很多依賴<google/protobuf/**> 之類的頭文件。如果手動去該太麻煩。 所以可以先將protobuffer在cygwin中 使用./configure && make && make install 安裝到cygwin中,這樣我們就可以去cygwin的頭文件中直接拿去需要的頭文件。如下:
將以上文件夾直接複製到NDK編譯的交叉編譯工具鏈的頭文件中。 我這裏是:
8 編寫項目所需的Android.mk, 如下:
注意紅色部分。
編譯運行 注意看控制檯是否編譯成功,是否鏈接成功。
編譯成功產生靜態鏈接庫:
鏈接到項目中。
至此,爲cocos2d-x添加protobuffer支持完畢。
因爲時間關係 還沒有測試protobuffer在android是否正常工作,請諒解。 等空了再補上。
-------------------------------------------------------------------------------------------------------------------------------
已驗證,在android平臺能成功運行