Cocos2d-x的Android平臺添加Protobuffer支持

軟件: cocos2d-x版本

protobuffer版本:

NDK版本:

Eclipse: 


之前在網上搜索了很多文章,發現大多文章都沒有一個完整的流程,自己摸索了2天,成功添加了protobuffer支持。這裏記錄下同時分享給其他人。

這裏的添加方式雷同於添加cocos2d-x所需要的第三方庫。


1. 利用cocos2d-x提供的python腳本新生成一個項目。(進入cocos2d-x/tools/project-creator, 編寫一個bat腳本用來生成項目 create.bat)

  1. @echo off  
  2. set /p projectName=Please Input Project name:  
  3. if "%projectName%"=="" goto inputError  
  4. set /p packageName=Please Input Package Name:  
  5. if "%packageName%"=="" goto inputError  
  6. create_project.py -project %projectName% -package %packageName% -language cpp  
  7. pause  
  8. exit  
  9. :inputError  
  10. @echo Project or package name is NULL!  
  11. 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如下:

  1. LOCAL_PATH := $(call my-dir)  
  2.   
  3. include $(CLEAR_VARS)  
  4.   
  5. LOCAL_MODULE := protobuf_static  
  6.   
  7. LOCAL_MODULE_FILENAME := libprotobuf  
  8.   
  9. LOCAL_CPP_EXTENSION := .cc  
  10.   
  11. LOCAL_SRC_FILES := \  
  12. src/google/protobuf/io/coded_stream.cc                \  
  13. src/google/protobuf/stubs/common.cc                   \  
  14. src/google/protobuf/descriptor.cc                     \  
  15. src/google/protobuf/descriptor.pb.cc                  \  
  16. src/google/protobuf/descriptor_database.cc            \  
  17. src/google/protobuf/dynamic_message.cc                \  
  18. src/google/protobuf/extension_set.cc                  \  
  19. src/google/protobuf/extension_set_heavy.cc            \  
  20. src/google/protobuf/generated_message_reflection.cc   \  
  21. src/google/protobuf/generated_message_util.cc         \  
  22. src/google/protobuf/io/gzip_stream.cc                 \  
  23. src/google/protobuf/compiler/importer.cc              \  
  24. src/google/protobuf/message.cc                        \  
  25. src/google/protobuf/message_lite.cc                   \  
  26. src/google/protobuf/stubs/once.cc                     \  
  27. src/google/protobuf/compiler/parser.cc                \  
  28. src/google/protobuf/io/printer.cc                     \  
  29. src/google/protobuf/reflection_ops.cc                 \  
  30. src/google/protobuf/repeated_field.cc                 \  
  31. src/google/protobuf/service.cc                        \  
  32. src/google/protobuf/stubs/structurally_valid.cc       \  
  33. src/google/protobuf/stubs/strutil.cc                  \  
  34. src/google/protobuf/stubs/substitute.cc               \  
  35. src/google/protobuf/stubs/stringprintf.cc               \  
  36. src/google/protobuf/text_format.cc                    \  
  37. src/google/protobuf/io/tokenizer.cc                   \  
  38. src/google/protobuf/unknown_field_set.cc              \  
  39. src/google/protobuf/wire_format.cc                    \  
  40. src/google/protobuf/wire_format_lite.cc               \  
  41. src/google/protobuf/io/zero_copy_stream.cc            \  
  42. src/google/protobuf/io/zero_copy_stream_impl.cc       \  
  43. src/google/protobuf/io/zero_copy_stream_impl_lite.cc  
  44.   
  45. #LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/protobuf  
  46.   
  47. #LOCAL_C_INCLUDES := $(LOCAL_PATH)/include/protobuf  
  48. #LOCAL_CFLAGS := -std=c99  
  49.                                    
  50. 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平臺能成功運行


發佈了21 篇原創文章 · 獲贊 6 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章