查詢專案的遊戲引擎版本

文章撰寫日期︰2014/12/30 11:30

一、問題

試圖編譯外來遊戲時,
因為不知道cocos2dx的遊戲引擎版本,
因此
$./build_native.sh
無法通過。

二、解決辦法

在開啟一個全新cocos2dx專案時,
其實會將cocos2dx引擎需要被編譯的相關程式整個原封不動的複製到新專案中。
因此在cocos2d.cpp檔裡會記錄著該專案的遊戲版本。

路徑如下︰
YourGameProject/libs/cocos2dx/cocos2d.cpp

打開來後,
就會看到cocos2dx所使用的引擎版本號了。


修復 cocos2dx v2.x 版 OpenSSL 過期的錯誤

文章撰寫日期︰2014/12/29 18:50
文章修改日期︰2014/12/30 10:20
文章修改次數︰1

一、問題

今天收到Google寄來的一封信,
跟我說我目前用的Cocos2d-x的OpenSSL協議版號過舊,
APK即將被強迫下架,
需要我盡快更新並重新上架。

內容如下︰
Your app is running an outdated version of OpenSSL, which has multiple security vulnerabilities. You should update OpenSSL as soon as possible.

The vulnerabilities were addressed in OpenSSL versions beginning with 1.0.1h, 1.0.0m, and 0.9.8za. To confirm your OpenSSL version, you can do a grep via ("$ unzip -p YourApp.apk | strings | grep "OpenSSL""). For more information about the vulnerability, please consult http://www.openssl.org/news/secadv_20140605.txt.

To confirm that you’ve upgraded correctly, upload the updated version to the Developer Console and check and after five hours.

This is the second warning we’ve sent you. Please note, while it's unclear whether these specific issues affect your application, applications with vulnerabilities that expose users to risk of compromise may be considered “dangerous products” and subject to removal from Google Play.

二、解決辦法

查了一下原來使cocos2dx引擎內建的OpenSSL版號使用過舊。

而前一陣子Google已經發表新聞稿(15年OpenSSL漏洞影響Android版Chrome,Google發布緊急更新),
因此也開始在抓OpenSSL過舊的APK。

請下載Cocos2dX v.2.x版更新檔並覆蓋取代底下的資料夾位置
/cocos2d-x/cocos2dx/platform/third_party/android/prebuilt/libcurl/libs

armeabi/libcurl.a覆蓋原來的armeabi/libcurl.a
armeabi-v7a/libcurl.a覆蓋原來的armeabi-v7a/libcurl.a
x86/libcurl.a覆蓋原來的x86/libcurl.a

如果下載連結失效,亦可至Github下載。

倘若用的是Cocos2dX v3.x版,請至此下載

更新完後,記得刪掉整個編譯出來的Android遊戲專案資料夾so檔,路徑如下
您的Android遊戲專案/proj.android/obj/local

並 $./build_native.sh 重新編譯您的遊戲專案即可修復問題。

三、其它

如果要知道現在apk使用OpenSSL的版號,
推薦一隻App︰Heartbleed Scanner

參考來源

1. cocos2dx官方論壇

將.so檔上傳至svn做版本控制

文章撰寫日期︰2014/09/16 17:40

SVN預設不會將.so等檔案上傳至SVN server,
因此在cocos2d-x裡使用build_native.sh檔編岀來的.so(C++靜態函式庫)不會被主動上傳至SVN Server。

如果需要上傳備份此檔案,
需下指令
$ svn add --no-ignore 欲添加至svn的檔案名稱

LOCAL_SRC_FILES points to a missing file

文章撰寫日期︰2014/09/15 16:11
cocos2d-x使用版本︰2.1.1-beta3

一、問題

今天在編譯cocos2dx時,
遇到

LOCAL_SRC_FILES points to a missing file 

cocos2dx/platform/third_party/android/prebuilt/libjpeg/libs/armeabi/libjpeg.a exists  or that its path is correct

的問題。



二、解決辦法


現在(2014/09/15,目前最新是cocos2dx3.2版)在Github上的cocos2dx,
在checkout到舊版(2.1.1-beta3)時,
cocos2dx/platform/third_party/android/prebuilt目錄底下的檔案已不齊全
這造成Android專案在build_native.sh時,
因為遺失相關檔案造成無法成功編譯遊戲成為.so檔。

這裡提供的檔案解壓縮覆蓋掉libcurl、libjpeg、libpng、libtiff四個檔即可解決問題。

build_native.sh 無法執行

文章撰寫日期︰2014/09/12 17:06

一、問題

今天在編譯(build_native.sh)國外的cocos2dx源碼時,
遇到程式報錯,格式在token{usage(){附近有誤。

/Users/lp43/cocos2d-x/Vitalify_Games/android/WareWolf_android_Source/proj.android/build_native.sh:
line 3: : command not found

/Users/lp43/cocos2d-x/Vitalify_Games/android/WareWolf_android_Source/proj.android/build_native.sh: line 5: : command not found

/Users/lp43/cocos2d-x/Vitalify_Games/android/WareWolf_android_Source/proj.android/build_native.sh: line 7: : command not found

/Users/lp43/cocos2d-x/Vitalify_Games/android/WareWolf_android_Source/proj.android/build_native.sh: line 8: syntax error near unexpected token `{ ' 

/Users/lp43/cocos2d-x/Vitalify_Games/android/WareWolf_android_Source/proj.android/build_native.sh: line 8: `usage(){ '

二、解決辦法

這是因為國外公司的cocos2dx用的是windows在開發,
而我用的是mac,
雖然build_native.sh檔看似沒問題,
但其實文字的encode已經大亂,
所以需要對build_native.sh檔下指令重新編碼,
$ dos2unix build_native.sh build_native.sh

即可解決這個bug。

而如果要查看原來檔案encode的樣子,
可以下指令
$ cat -v build_native.sh

查看。
你會看到很多不該存在的亂碼格式。

Cannot find module with tag 'Box2D' in import path

文章撰寫日期︰2014/08/23 21:29
cocos2d-x使用版本︰2.0.4

一、問題

今天在重build cocos2d-x專案時,
遇到以下問題

Android NDK: /Users/lp43/cocos2d-x/cocos2d-x2.0.4/external/Box2D/Android.mk: Cannot find module with tag 'Box2D' in import path

Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?

二、解決辦法

cocos2dx在使用ndk編譯時,
會去讀Android.mk腳本。

因為腳本裡宣告了該專案會使用者Box2D重力引擎模組
$(call import-module,Box2D)

因此在NDK make時,
程式去找cocos2dx根目錄底下的Box2D資料夾,
試圖將該目錄編譯成靜態C函式庫,
但因為在cocos2dx 2.0.4 Box2D的預設路徑並不在cocos2dx目錄底下,
而是在cocos2dx/external/Box2D
因此要將import-module更改如下

$(call import-module,external/Box2D)

這樣子ndk就找的到Box2D資源並可順利編譯。

使用ccb綁定JS執行遇到Assertion failed: CCNodeLoaderLibrary.cpp, line 67.

文章撰寫日期︰2014/01/25 19:22
cocos2d-x使用版本︰2.2.2
文章來源︰小鰻的cocos2d-x學習筆記

一、問題

使用ccb綁定JS執行遇到
Assertion failed: (ccNodeLoadersIterator != this->mCCNodeLoaders.end()), function getCCNodeLoader, file /Users/lp43/cocos2d-x/cocos2d-x2.2.2/extensions/CCBReader/CCNodeLoaderLibrary.cpp, line 67.


二、解決辦法

這是因為有時候cocosbuilder有個bug,會預設是要和c++綁定,因此js class找不到。
需將[Document]-->[Javascript Controlled]勾選起來。