使用compile_scripts.php脚本,生成lua打包的zip,解决加密问题

@echo off

set DIR=%~dp0
set TEMPLATE_ROOT=%DIR%..
echo %TEMPLATE_ROOT%\quick\bin\win32\php.exe

echo - cleanup
if exist "%DIR%script" rmdir /s /q "%DIR%script"
mkdir "%DIR%script"
if exist "%DIR%scriptDonkey" rmdir /s /q "%DIR%scriptDonkey"
mkdir "%DIR%scriptDonkey"

if exist "%DIR%framework_precompiled/" rmdir /s /q "%DIR%framework_precompiled/"
mkdir "%DIR%framework_precompiled/"

echo - copy scriptDonkey
xcopy  /s /q %TEMPLATE_ROOT%\project\cardgame\src\app\*.*      %DIR%script\app\

echo - copy framework_compiled
xcopy  /s /q %TEMPLATE_ROOT%\project\cardgame\src\framework\*.*      %DIR%framework_precompiled\framework\
xcopy  /s /q %TEMPLATE_ROOT%\project\cardgame\src\cocos\*.*      %DIR%framework_precompiled\cocos\


echo - copy scriptDonkey
xcopy /s /q %TEMPLATE_ROOT%\project\cardgame\src\bqsframework\*.*    %DIR%scriptDonkey\bqsframework\
xcopy /s /q %TEMPLATE_ROOT%\project\cardgame\src\config.lua    %DIR%scriptDonkey\
xcopy /s /q %TEMPLATE_ROOT%\project\cardgame\src\main.lua    %DIR%scriptDonkey\



%TEMPLATE_ROOT%\quick\bin\win32\php.exe %TEMPLATE_ROOT%\quick\bin\lib\compile_scripts.php -i script/  -o script.zip   
%TEMPLATE_ROOT%\quick\bin\win32\php.exe %TEMPLATE_ROOT%\quick\bin\lib\compile_scripts.php -i scriptDonkey/ -o scriptDonkey.zip
%TEMPLATE_ROOT%\quick\bin\win32\php.exe %TEMPLATE_ROOT%\quick\bin\lib\compile_scripts.php -i framework_precompiled/ -o framework_precompiled.zip

echo -copy zip to res/
xcopy /s /q  %DIR%scriptDonkey.zip  %TEMPLATE_ROOT%\project\cardgame\res\ 
xcopy /s /q  %DIR%framework_precompiled.zip  %TEMPLATE_ROOT%\project\cardgame\res\ 

pause

将上面的bat自己按照需求改一下,然后执行,会生成zip包

可以参考quick\bin\compile_scripts.bat。

@echo off
set DIR=%~dp0
%DIR%win32\php.exe "%DIR%lib\compile_scripts.php" %*

compile_scripts.php 参数如下:

$options = array(
    array('h',   'help',       0,      false,       'show help'),
    array('i',   'src',        1,      null,        'source files directory'),
    array('o',   'output',     1,      null,        'output filename | output directory'),
    array('p',   'prefix',     1,      '',          'package prefix name'),
    array('x',   'excludes',   1,      null,        'excluded packages'),
    array('m',   'compile',    1,      'zip',       'compile mode'),
    array('e',   'encrypt',    1,      null,        'encrypt mode'),
    array('ek',  'key',        1,      null,        'encrypt key'),
    array('es',  'sign',       1,      null,        'encrypt sign'),
    array('ex',  'extname',    1,      'lua',       'encrypted file extension name (default is "lua"), only valid for xxtea_chunk'),
    array('c',   'config',     1,      null,        'load options from config file'),
    array('q',   'quiet',      0,      false,       'quiet'),
    array('jit', 'jit',        0,      false,       'using luajit compile framework'),
);

你可以根据你的需求传递参数,比如

1、 -h 帮助。显示参数的解释及使用,英文的。   
2、-i 源码目录。   
3、-o 输出文件或目录。   
4、-p 包前缀。   
5、-x 不包含在内的包。如果你有些源文件不想被编译进去的话,将会用到这个参数,只能设置包(对应文件夹),不能指定到文件,多个包的话用,(逗号)隔开。示例:-x app.test,server,指的是app/test/.*,server/.* 这两个目录下的所有文件都不会被编译。  
6、-m 编译模式。有两个值 :   
-m zip 默认,生成的是zip格式文件;   
-m files 生成的是一个个文件,不打包,这个时候-o参数指的就是输出的目录。   
7、-e 加密模式。可以对编译后的文件再进行 XXTEA 加密,有两个值:   
   -e xxtea_zip 对应-m zip,对打包后的zip格式文件进行加密,之后再打包成zip格式。   
   -e xxtea_chunk 对编译后的文件加密,最后打不打包取决于-m。   
8、-ek 加密密钥。对-e有效,且设置了-e之后一定要设置-ek。   
9、-es 加密签名。对-e有效,默认值为"XXTEA",这个只是为了让引擎知道文件是否被加密过,意义不大,所以可不设置。  
  
10、-ex 编译后的文件的后缀名。对-m files有效,默认值为"lua"。   
11、-c 从一个文件加载参数列表。   
12、-q 生成过程不输出信息。

要调用里面的脚本需要在mail.lua文件中CCLuaLoadChunksFromZip("res/framework_precompiled.zip")语句下添加一句代码:

CCLuaLoadChunksFromZip("res/test.zip")

lua里面加载的话:

cc.LuaLoadChunksFromZIP(XXXX.zip);

删除掉原来的脚本,注意要保留main.lua,测试一下,证明程序可以运行。

必须得用compile_scripts 生成的ZIP

加密的话,解密的时候可以加上 ,我这里是AppDelegate.cpp

LuaStack* stack = engine->getLuaStack();
stack->setXXTEAKeyAndSign("2dxLua", strlen("2dxLua"), "XXTEA", strlen("XXTEA"));

http://my.oschina.net/lonewolf/blog/178515

http://www.cocoachina.com/bbs/read.php?tid=205802

http://blog.csdn.net/chengyingzhilian/article/details/25658091