学习Cocos2d-x Lua:发布时加密Lua源文件
在这个系列中,我们将专注于学习Cocos2d-x Lua,总结Lua开发过程中涉及的各类知识点,以及探讨如何在开发过程中使用Cocos Code IDE。本篇文章将详细讲解如何对Lua源代码进行加密。
背景
Cocos2d-x Lua(Quick - Cocos2d - x)集成了Player模拟器,能够快速测试Lua游戏代码。然而,当游戏开发完成并需要打包发布时,我们不希望Lua源代码以明文形式暴露在apk或ipa包中,因为这可能导致我们的劳动成果被轻易剽窃。幸运的是,Quick框架为我们提供了相应的加密支持。
本文将记录ipa打包加密Lua的全过程。
环境信息
- 引擎版本:Cocos2d - x Lua 3.3 final
- 目标环境:iOS
- 开发平台:Mac with Xcode
加密步骤
步骤1:切换到项目目录
打开Terminal,使用cd命令切换到项目目录。示例命令如下:
cd /Users/u0u0/Documents/project/quick_project/test
注:/Users/u0u0/Documents/project/quick_project/test 是使用Player建立的项目根路径,你需要根据实际情况进行替换。
步骤2:运行加密工具
运行Quick提供的compile_scripts.sh加密工具。示例命令如下:
/Users/u0u0/Documents/quick-3.3/quick/bin/compile_scripts.sh -i src -o res/game.zip -e xxtea_zip -ek aaa -es Xt
compile_scripts.sh可以在Cocos2d - x Lua安装路径下找到,需要输入全路径。该工具的参数详情如下:
-h:显示帮助信息-i:指定源码目录-o:指定输出文件或目录-p:设置包前缀-m:编译模式,包括zip(zip压缩格式)和files(离散文件)-e:加密模式,包括xxtea_zip(对zip包进行xxtea加密)和xxtea_chunk(对.luac进行加密)-ek:设置加密密钥-es:设置加密签名-ex:设置编译后的文件的后缀名-c:从一个文件加载参数列表-q:生成过程不输出信息
在上述示例中,我们对Lua源文件所在的src目录进行加密,输出到res/game.zip,加密模式为对zip包进行xxtea加密,加密密钥为aaa,加密签名为Xt。
步骤3:打开iOS工程文件并去掉src文件夹引用
打开iOS工程文件,其路径为/Users/u0u0/Documents/project/quick_project/test/frameworks/runtime-src/proj.ios_mac/test.xcodeproj。然后去掉src文件夹的引用(注意:不是删除src,仅去掉引用,这样源代码就不会被打包进ipa了)。
步骤4:修改启动项
关闭Cocos Code IDE支持
打开/Users/u0u0/Documents/project/quick_project/test/frameworks/runtime-src/Classes/CodeIDESupport.h文件,将Cocos Code IDE支持关闭,代码如下:
#ifndef CC_CODE_IDE_DEBUG_SUPPORT
#define CC_CODE_IDE_DEBUG_SUPPORT 0
#endif
修改Lua启动入口
打开/Users/u0u0/Documents/project/quick_project/test/frameworks/runtime-src/Classes/AppDelegate.cpp文件,在以下代码之后:
LuaStack* stack = engine->getLuaStack();
加入以下代码:
stack->setXXTEAKeyAndSign("aaa", 3, "Xt", 2); // 与game.zip的生成参数对应
// load framework
stack->loadChunksFromZIP("res/game.zip");
stack->executeString("require 'main'");
并屏蔽掉原程序入口:
#else
// engine->executeScriptFile(ConfigParser::getInstance()->getEntryFile().c_str());
#endif
步骤5:运行Xcode测试
运行Xcode进行测试,如果程序能够正常启动,并且看到如下log信息,说明已使用加密的game.zip包:
lua_loadChunksFromZIP() - load zip file: /private/var/mobile/Containers/Bundle/Application/A2985A39-3588-48AD-8219-2476A12B956E/test iOS.app/res/game.zip
lua_loadChunksFromZIP() - loaded chunks count: 125
通过以上步骤,我们就完成了Cocos2d - x Lua项目中Lua源文件的加密和ipa打包过程。