quick-cocos2d-x是用lua腳原本寫的,而lua是明文形式,若是不對腳本進行處理,那麼咱們所寫的代碼將可能暴露給別人(apk和ipa都是簡單的zip包裝)。
quick-cocos2d-x框架爲咱們提供了一個可編譯和加密代碼的工具compile_scripts.sh(目前只提供了mac版 ),它位於quick-cocos2d-x/bin/ compile_scripts.sh 。下面將對其進行詳細的介紹。
1、安裝luajit
lua腳本的編譯是經過luajit來執行的,若是你以前沒有安裝過luajit的話,運行compile_scripts.sh會出現下面的提示:
下面將介紹如何安裝luajit。
一、運行<path>/quick-cocos2d-x/bin/install_luajit.sh ,<path>爲你具體的路徑,請自行替換。 這個時候會執行luajit的構建操做。
二、完成構建以後將進行安裝,安裝以前會叫你輸入系統帳戶密碼,以下圖:
三、以後就是安裝過程了,完成以後會出現下圖這樣的界面:
恭喜你完成了第一步。
2、示例
咱們先來運行一個示例吧。這個將幫助你瞭解編譯的過程。
咱們作的很簡單,就是把代碼編譯成一個zip包,並把它放置到res目錄下(framework_precompiled.zip也在此目錄)。
一、在bash下,設置當前工做目錄到你遊戲的目錄下,如: c++
cd /Users/myname/mygames/game01
二、運行 compile_scripts.sh 。 shell
/Users/myname/lua/tools/quick-cocos2d-x/bin/compile_scripts.sh -i scripts -o res/game.zip
生成會顯示出具體的信息,如參數是什麼、源代碼文件夾地址、生成了什麼文件,生成文件的位置等等,以下圖:
以後就會看到game.zip在res目錄下了,解壓(不是必須操做,只是爲了看看裏面有什麼)以後發現:
它生成了一個個的二進制文件,文件名已經包含了包名。
到這裏你也必定會問,命令中-i,-o這些參數是什麼意思啊?還有哪些其它的參數啊 ?下面咱們將對其進行詳解。
3、參數詳解
compile_scripts.sh中帶有很多的參數,詳情以下:
一、 -h 幫助。顯示參數的解釋及使用,英文的。
二、-i 源碼目錄。
三、-o 輸出文件或目錄。
四、-p 包前綴。
五、-x 不包含在內的包。若是你有些源文件不想被編譯進去的話,將會用到這個參數,只能設置包(對應文件夾),不能指定到文件,多個包的話用,(逗號)隔開。示例:-x app.test,server,指的是app/test/.*,server/.* 這兩個目錄下的全部文件都不會被編譯。
注:經測試,目前這個參數沒有做用,已報告給做者,請等待修復。
六、-m 編譯模式。有兩個值 :
-m zip 默認,生成的是zip格式文件;
-m files 生成的是一個個文件,不打包,這個時候-o參數指的就是輸出的目錄。
七、-e 加密模式。能夠對編譯後的文件再進行 XXTEA 加密,有兩個值:
-e xxtea_zip 對應-m zip,對打包後的zip格式文件進行加密,以後再打包成zip格式。
-e xxtea_chunk 對編譯後的文件加密,最後打不打包取決於-m。
注:xxtea_zip必定要與-m zip編譯模式對應,否則會提示出錯。
八、-ek 加密密鑰。對-e有效,且設置了-e以後必定要設置-ek。
九、-es 加密簽名。對-e有效,默認值爲"XXTEA",這個只是爲了讓引擎知道文件是否被加密過,意義不大,因此可不設置。
下面是一個編譯及加密的例子: bash
compile_scripts.sh -i scripts -o res/game.zip -e xxtea_zip -ek aaa -es XT
十、-ex 編譯後的文件的後綴名。對-m files有效,默認值爲"lua"。
十一、-c 從一個文件加載參數列表。
十二、-q 生成過程不輸出信息。
4、修改 AppDelegate .cpp
咱們編譯了代碼,而且把main.lua文件也包含進去了,咱們要修改c++中的代碼才能讓程序正常運行。這個在 AppDelegate .ccp文件中修改,把 applicationDidFinishLaunching ()方法改爲以下: app
bool AppDelegate::applicationDidFinishLaunching() { ... CCLuaStack *pStack = pEngine->getLuaStack(); // 若是設置了 -e 和 -ek 要加上下面這句 // pStack->setXXTEAKeyAndSign("aaa", 3); // 若是設置了 -e 和 -ek -es 則要加上下面這句 pStack->setXXTEAKeyAndSign("aaa", 3, "XT", 2); // load framework pStack->loadChunksFromZip("res/framework_precompiled.zip"); pStack->loadChunksFromZip("res/game.zip"); pStack->executeString("require 'main'"); return true; }
注意:一直有朋友不太注意,
pStack->setXXTEAKeyAndSign("aaa", 3, "XT", 2);
這一句的第二和第四個參數都是前一個參數的長度,並非固定值,如能夠這樣
pStack->setXXTEAKeyAndSign("abcd", 4, "SIGNCODE", 8);
最後須要注意的是:編譯發佈程序的時候要記得把源代碼文件夾從項目中移除(不是刪除,只是不包含進項目裏),否則一切都白費了。
到此整個過程結束,咱們的代碼已經被很好的保護起來了。 框架