学习Cocos2d-x Lua:发布时加密Lua源文件

2015年03月25日 11:09 0 点赞 0 评论 更新于 2025-11-21 18:30

在这个系列中,我们将专注于学习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打包过程。

作者信息

boke

boke

共发布了 3994 篇文章