主要是资源加密和脚本加密。cocos2dx版本3.10。
脚本加密
脚本加密主要是用cocos2dx自带的加密方法,把js脚本转换成jsc二进制文件。
主要是利用cocos jscompile命令进行转换可以输入cocos jscompile -h查看一下主要功能:
usage: cocos jscompile [-h] [-v] [-s SRC_DIR_ARR] [-d DST_DIR] [-c]
[-o COMPRESSED_FILENAME] [-j COMPILER_CONFIG]
[-m CLOSURE_PARAMS]
对 js 文件进行加密和压缩处理。
optional arguments:
-h, --help show this help message and exit
-v, --verbose 更多输出信息。
-s SRC_DIR_ARR, --src SRC_DIR_ARR
指定需要编译的 js
文件路径,支持指定多个路径。
-d DST_DIR, --dst DST_DIR
指定输出文件的路径。
-c, --use_closure_compiler
使用 closure 编译器将所有 js
文件压缩为一个大的文件。
-o COMPRESSED_FILENAME, --output_compressed_filename COMPRESSED_FILENAME
指定压缩为一个大的 js
文件名称。只有当使用了 '-c'
参数时起效。
-j COMPILER_CONFIG, --compiler_config COMPILER_CONFIG
指定 json 格式的 closure
编译器配置,请参考
compiler_config_sample.json。
-m CLOSURE_PARAMS, --closure_params CLOSURE_PARAMS
传给 closure 编译器的扩展参数。会覆盖
closure 编译器的已有配置。
主要使用:
cocos jscompile -s xxxgame/frameworks/cocos2d-x/cocos/scripting/js-bindings/script -d xxxgame/frameworks/cocos2d-x/cocos/scripting/js-bindings/script
cocos jscompile -s xxxgame\src -d xxxgame\src
这两个命令对src和js-binding下面的js文件进行加密。然后可以把js文件删除。直接使用jsc就可以。也可以把这个命令做个配置,配在build_native.py下面,每次打包都自动转换了
资源加密
具体可以看这里
资源加密主要是利用TexturePacker把小图转化成大图,然后利用TexturePacker对图片进行加密操作。需要导出pvr.czz文件,然后选择Content protection对图片生成密钥进行加密。可以选择生成系统密钥,然后保存32位二进制数,然后直接publish就可以。
我们可以先导出xx.plist和xx.png在cocostudio中使用,然后导出xx.plist和xx.pvr.czz文件在 工程中。
然后在AppDelegate中添加如下:
bool AppDelegate::applicationDidFinishLaunching() {
// initialize director
..............
// 2528bd78 112d53ef fa5e5fb2 b7a5b25a (加密的 必须是32位十六进制值)
ZipUtils::setPvrEncryptionKeyPart(0, 0x76bcbb68);
ZipUtils::setPvrEncryptionKeyPart(1, 0x3a89c4f1);
ZipUtils::setPvrEncryptionKeyPart(2, 0xa9dfbac2);
ZipUtils::setPvrEncryptionKeyPart(3, 0x65a46419);
// 或者按照这种方式添加
//ZipUtils::setPvrEncryptionKey(0x2528bd78, 0x112d53ef, 0xfa5e5fb2, 0xb7a5b25a);
auto scene = TexturePackageEnvryption::scene();
// run
director->runWithScene(scene);
return true;
}
然后就可以在程序中使用了,如下:
cc.spriteFrameCache.addSpriteFrames("ddz_font.plist", "ddz_font.pvr.ccz");
//ui文件中使用
var ui = ccs.load(res.MainScene_json);
var node = ui.node;
//脚本中直接使用
var img_1 = new ccui.ImageView();
node.addChild(img_1);
img_1.setPosition(cc.p(cc.winSize.width/2, cc.winSize.height/2));
img_1.loadTexture("bisaixiangqing.png", ccui.Widget.PLIST_TEXTURE);
this.addChild(ui.node);