本文來自:http://www.welefen.com/js-to-jsc-on-cocos2d-html5-jsb-mode.html ,經筆者親自在項目中試驗,在cocos2dx 2.1.4下面,成功加密運行,所以記錄一筆,這個問題也困擾了筆者大半天的時間,希望可以幫助一部分開發者。
cocos2d-html5是一個用JS來開發游戲的框架,通過javascript Binding的方式可以將游戲編譯到手機上。這對前端開發人員來說非常方便,開發效率也比使用c++開發要快的多。
jsb模式下是通過打包spidermonkey來運行JS代碼的。由於JS是一個解釋型的語言,所以是把js當作assets直接拷貝進去的。帶來的問題就是將apk包解壓后就可以直接拿到js的源代碼。
幸好官方出了一個cocos2d-console的工具,通過該工具可以將js編譯為字節碼。該工具在官方發布包的tools目錄下。
那如何在發布的時候自動調用該工具,將js編譯為jsc呢?
android
由於android下先要執行pro.android/build_native.sh腳本,所以我們可以在腳本里加入自動編譯的功能,代碼如下:
1
2
3
4
5
6
7
|
#定義console的目錄
COCOS2D_CONSOLE=$COCOS2DX_ROOT/tools/cocos2d-console/console/
python $COCOS2D_CONSOLE/cocos2d.py jscompile -s assets/script/ -d assets/script/;
cd assets/script;
#刪除js源文件
find . -type f -name
"*.js"
| xargs rm -rf;
cd ../../;
|
以上代碼要放在調用NDK編譯之前。
ios
由於ios下編譯沒有對應的build_native.sh腳本,所以就沒法使用類似的方式了。幸好xcode下編譯時可以添加自定義的run script
選擇 項目 -> TARGETS -> Build Phases -> Add Build Phases -> Add Run Script,添加如下的內容:
1
2
3
4
5
6
7
8
9
|
source ~/.bash_profile
CONSOLE_PATH=$COCOS2DX_ROOT
"/tools/cocos2d-console/console/"
;
TARGET_DIR=$BUILT_PRODUCTS_DIR
"/"
$PRODUCT_NAME
".app/"
;
JS_DIR=$TARGET_DIR
"/script/"
;
/usr/bin/python $CONSOLE_PATH/cocos2d.py jscompile -s $JS_DIR -d $JS_DIR;
find $JS_DIR -type f -name
"*.js"
| xargs rm -rf;
|
這樣在編譯時就會自動調用該腳本。(需要在.bash_profile里定義cocos2dx的根目錄,並且變量名為COCOS2DX_ROOT)
將js編譯為字節碼發布,就不用擔心別人可以拿到js源代碼了。
注:筆者在項目中按照此配置在cocos2dx 2.1.4的版本中添加, 發現程序並不能按照實際的進行, 由於2.1.4的版本是先查找js文件再查找jsc文件,所以一直會再某一個地方崩潰(如果單獨測試main.js文件,則一切正常), 具體原因,由於筆者能力有限,未能追查出來; 在這里,筆者提供一個解決方案, 就是修改cocos2dx 的源碼, 使其先查找jsc文件,再查找js文件,則程序就能正常運行, 至此筆者的項目正常運行, 得以發布.