学习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文件,修改Lua启动入口。在以下代码之后:
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打包过程,有效保护了我们的源代码不被轻易窃取。