加密shell脚本
#!/bin/bash CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" CMP_PATH=$CURRENT_PATH/quick/bin SRC_PATH=$CURRENT_PATH/../src OUT_PATH=$CURRENT_PATH/../res/sc MYSIG="BJGAME" MYKEY="W@Z#X^^" cd $CMP_PATH # ./compile_scripts.sh -i $SRC_PATH -x main,config,cocos,framework -o $OUT_PATH/game.tg -e xxtea_zip -es $MYSIG -ek $MYKEY #android的可能有问题 ./compile_scripts.sh -m files -i $SRC_PATH -x main,framework -o $OUT_PATH/ -e xxtea_chunk -es $MYSIG -ek $MYKEY
参数详解
compile_scripts.sh和compile_scripts.PHP在quick-cocos2dx引擎安装目录下
$options = array( array('h','help',false,'show help'),array('i','src',1,null,'source files directory'),array('o','output','output filename | output directory'),array('p','prefix','','package prefix name'),array('x','excludes','excluded packages'),array('m','compile','zip','compile mode'),array('e','encrypt','encrypt mode'),array('ek','key','encrypt key'),array('es','sign','encrypt sign'),array('ex','extname','lua','encrypted file extension name (default is "lua"),only valid for xxtea_chunk'),array('c','config','load options from config file'),array('q','quiet','quiet'),array('jit','jit','using luajit compile framework'),); -h 帮助 -i 源码目录,input -o 输出文件或目录,output -p 包前缀 -x 不包括文件夹或文件,如果你有些源文件不想被编译进去的话,将会用到这个参数 -m 编译模式:zip(zip压缩格式)、files(离散文件) -e 加密模式:xxtea_zip(对zip包进行 xxtea 加密)、xxtea_chunk(对.luac 进行加密) -ek 加密密钥 -es 加密签名 -ex 编译后的文件的后缀名 -c 从一个文件加载参数列表 -q 生成过程不输出信息 compile mode: -m zip (default) package all scripts bytecodes to a ZIP archive file. -m c package all scripts bytecodes to a C source file. -m files save bytecodes to separate files. -o specifies output dir. encrypt mode: -e xxtea_zip encrypt ZIP archive file with XXTEA algorithm,-e xxtea_chunk encrypt every bytecodes chunk with XXTEA algorithm. * default encrypt sign is "XXTEA" * output file extension name is "bytes"
修改AppDelegate.cpp
bool AppDelegate::applicationDidFinishLaunching() { ... //protofuf lua luaopen_protobuf_c(L); LuaStack* stack = engine->getLuaStack(); stack->setXXTEAKeyAndSign("W@Z#X^^",strlen("W@Z#X^^"),"BJGAME",strlen("BJGAME")); string path = FileUtils::getInstance()->fullPathForFilename("src/main.lua"); CCLOG("path ==%s",path.c_str()); size_t pos; while ((pos = path.find_first_of("\\")) != std::string::npos) { path.replace(pos,"/"); } size_t p = path.find_last_of("/\\"); if (p != path.npos) { const string dir = path.substr(0,p); stack->addSearchPath(dir.c_str()); p = dir.find_last_of("/\\"); if (p != dir.npos) { stack->addSearchPath(dir.substr(0,p).c_str()); } } string env = "__LUA_STARTUP_FILE__=\""; env.append(path); env.append("\""); stack->executeString(env.c_str()); CCLOG("------------------------------------------------"); CCLOG("LOAD LUA FILE: %s",path.c_str()); CCLOG("------------------------------------------------"); //#ifdef DEBUG // engine->executeScriptFile(path.c_str()); // //#else // // stack->executeScriptFile(path.c_str()); // stack->loadChunksFromZIP("res/sc/game.tg"); // string script_main = ""; // script_main += "require(\"main\")"; // // CCLOG("Boot script: \n%s",script_main.c_str()); // engine->executeString(script_main.c_str()); // // //#endif return true; }最后需要注意的是:编译发布程序的时候要记得把源代码文件夹从项目中移除(不是删除,只是不包含进项目里),不然一切都白费了