quick-cocos2d-x源文件编译及加密详解

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);

最后须要注意的是:编译发布程序的时候要记得把源代码文件夹从项目中移除(不是删除,只是不包含进项目里),否则一切都白费了

到此整个过程结束,咱们的代码已经被很好的保护起来了。
框架

相关文章
相关标签/搜索