编辑: kieth | 2019-02-02 |
3 种模式: ? zip 模式为默认模式,即将所有源码编译后打包成一个 zip 压缩包. ? c 模式会将所有源码编译后生成一对 C 的源文件和头文件,文件中定义了存储字 节码的数组以及相关的接口,使用生成的接口可以加载这些 Lua 脚本. ? files 模式会将所有源码编译之后不进行打包,编译后的文件会被输出到-o 选项所 指定的路径下. 加密有以下两种模式: ? xxtea_zip 模式会使用 XXTEA 算法加密整个 zip 包,需要配合 zip 编译模式使用. 第2章加密解密 ・21・ 图2-6 编译脚本帮助说明 ? xxtea_chunk 模式会使用 XXTEA 算法加密每一个编译后的脚本文件,默认签名为 XXTEA. 第1篇实用技术篇 ・22・ 加密之后只需要在程序初始化时,调用 LuaStack 的setXXTEAKeyAndSign()方法设置 密钥和签名,即可使用加密后的脚本,如果将脚本编译后打包成一个 zip 压缩包,需要调 用LuaStack 的loadChunksFromZIP()方法来加载压缩包中的脚本.在loadChunksFromZIP() 方法中会判断 zip 包是否经过了 XXTEA 加密,如果是则进行解密,并取出里面的文件, 逐个调用 luaLoadBuffer()方法加载脚本文件.在luaLoadBuffer()方法中会判断要加载的脚 本是否经过了 XXTEA 加密,如是则进行解密,然后载入 Lua 虚拟机中. bool AppDelegate::applicationDidFinishLaunching() { … LuaStack *pStack = pEngine->
getLuaStack();
//如果设置了 -e 和-ek 需要调用 setXXTEAKeyAndSign 设置密钥 //pStack->
setXXTEAKeyAndSign( mypassword , strlen( mypassword ));
//如果设置了 -e 和-ek -es 需要调用 setXXTEAKeyAndSign 设置密钥和签名 pStack->
setXXTEAKeyAndSign( mypassword , strlen( mypassword ), mysign , strlen( mysign ));
pStack->
loadChunksFromZip( res/game.zip );
pStack->
executeString( require '
main'
);
return true;
} 在某些情况下,将Lua 脚本编译会导致一些问题,如iOS 下的兼容性问题,在另外一 些情况下将脚本编译好打包成 zip 也会导致一些其他的问题,如无法使用热更新. 这种情况下希望能够不编译脚本、不打包成 zip,只是加密脚本,那么应该怎么做呢? 可以使用 cocos.py 来打包,它支持在打包的时候加密且不编译 Lua 脚本,可以输入 cocos compile-h 命令来查看 cocos.py 编译相关的帮助信息,如图 2-7 所示. 图2-7 cocos.py 的帮助信息 在编译的时候使用--compile-script ........