squish是一个开源的用于打包lua脚本的小工具,它的主要功能是将多个lua文件整合成一个文件,并在此基础上做压缩和混淆等处理,混淆和压缩后的代码可以直接被执行而不需要先做解压还原等操作。

它的github地址:https://github.com/LuaDist/squish

这个工具安装和使用都很方便,下载源代码后在目录内直接make就行,特别需要说明的是,这个东西目前对lua5.2的支持还不好,所以机器上需要装lua5.1版本才可以正常运行它。你可以运行make install将它安装到你的usr/local/bin目录。

安装完成后,我们就可以开始使用它了。

squish在运行时需要一个叫做squishy的配置文件来完成所有操作,在这个配置文件你最主要的需要告诉squish3件事情:

1.最终生成的打包文件的文件名和位置,使用“Output 文件位置”的格式指明;

2.所有你需要squish处理的lua文件的位置和对应的模块名,使用“Module 模块名 文件位置”格式指明;

3.你lua文件中的入口文件,即main文件,使用“Main 文件位置”的格式来说明,特别需要说明的是,有些时候这个入口文件是可以省略的,这取决于你的lua文件的结构。

在这里我们以cocos2d-x-2.2.1 samples里的HelloLua为例。这个工程中一共有两个lua文件,一个叫hello.lua,一个是hello2.lua。我们知道这个hello.lua就是该程序的入口文件,在这里我们把我们打包后的文件其名为out.lua,于是,对于这两个文件,我们的squishy要这样写:

Output "./out.lua"

Module "hello2" "./hello2.lua"
Main "./hello.lua"

还有一点要说明,这个squishy文件实际上相当于一个标准的lua文件,所以在其中可以使用lua的“--”来做注释。

接下来我们就可以用squish来处理这些lua文件了。下面我讲一下squish的几个重要的参数。

1.squish后的第一个参数是给定squishy文件所在的目录,这个参数是可以省略的,如果省略,则squish会在它所在的目录寻找squishy文件。

2.squish提供一个种叫“Minify”的方式对lua文件进行压缩,具体是对lua源文件中的空格,折行,注释以及变量名做处理,达到缩减lua体积的效果,squish对minify提供了两种参数,--no-minify指定不做minify处理,--minify-level=level在对源文件做minify处理的基础上,指明minify的程度,这个程度分为:none,basic,default,full,squish是默认开启minify的。

3.squish用Uglify参数指定对lua源文件的混淆处理,squish默认是不开启混淆的,所以如果需要混淆则要加上--uglify这个参数,并使用--uglify-level=level来指定混淆的级别,关于squish混淆的具体原理有兴趣的可以看一下squish的官方说明,或者直接研究它的源代码,这里就不多说了:)

除了上面所说的参数,还可以添加--gzip,--compile等参数对打包好的lua文件做额外的zip,编译等操作,在这里也不具体讲了,有兴趣的朋友可以试试。

ok,说了这么多,现在让我实际运行命令吧。还是针对上面讲的例子,假设我们要发布最终的程序了,我们决定使用minify,并且level为full,并且对代码做full的uglify,我们只需要运行下面的命令:

./squish --minify-level=full --uglify --uglify-level=full

于是,最终整合缩减混淆过lua文件诞生了:

虽然有些代码还是可以认出来,但是已经达到了阻止人类轻易修改与辨识的混淆程度。

我们再把uglify去掉看看结果,运行:

./squish --minify-level=full

区别还是很大吧:)

以上就是squish这个工具的大概用法和例子了,如果结合一些简单的bash脚本,可以实现更加强大的功能。

有空的话我会写点东西分享一下我们项目中使用这个的经验。

有问题的话可以留言给我,希望大家用的愉快。

原创文章,转载请说明出处,谢谢:)

[原创]使用squish打包与混淆cocos2d-x的lua脚本的更多相关文章

  1. Android 混淆打包不混淆第三方jar包

    项目由于要公布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件里加入不须要混淆的类和第三方的jar包   这个是保持自己包中不须要混淆的类,假设有些类调用了jni ...

  2. 自动化打包资源混淆集成python实践----资源混淆

    前面自动化打包资源混淆集成python实践----打包一文讲述了四种打包方案,以及美团打包方案.apk注释添加渠道号方案的实现.这里讲集成资源混淆. 1.资源混淆带来的好处: 1)对资源文件起一定的保 ...

  3. android打包代码混淆

    android应用打包代码混淆:   1.将project.propertier文件中的proguard.config=proguard-android.txt打开  拷贝指定的文件到应用中 2.更改 ...

  4. Quick-Cocos2d-x Lua脚本加密打包器

    准备开新项目了,在寻找合适的框架,后来就发现了Quick-Cocos2d-x这玩意. 别说,还挺好使.之后一步步研究,发现Lua不加密是不行的. 加密的方法在这里. 因为在做版本更新的时候,一般大家都 ...

  5. Android studio打包APK混淆配置

    要在打包APK时加入混淆需要在Module中的buid.gradle中加入如下信息 buildTypes { release { minifyEnabled true shrinkResources ...

  6. 使用Android Studio手把手教你将应用打包+代码混淆

    最近几天用Google的Design库写了个App,使用Android Studio将app打包时遇到的几个瓶颈,所以把详细步骤写入下来. AS中怎么获取应用签名 这和eclipse不同,eclips ...

  7. androidStudio 打包与混淆

    在gradle中通过makeJar打包 不同模块的gradle都支持打包功能,application module的build.gradle中引入的是com.android.application插件 ...

  8. 自动化打包资源混淆集成python实践----打包

    1.自动化打包方案 1)友盟多渠道多渠道打包 2)gradle productFlavors系统的条件编译 3)美团打包 4)APK文件注释写入渠道号 2.各打包方案简介 1)友盟多渠道多渠道打包(w ...

  9. Gradel 多渠道打包 代码混淆

    http://blog.csdn.net/ttccaaa/article/details/47687241 http://www.bubuko.com/infodetail-987756.html h ...

随机推荐

  1. 去除C/C++程序代码中的注释

    最近搞软件著作权,去除代码空行和注释比较麻烦,想写个程序自动去除,去网上搜了下,发现有类似的程序,不过只有去除注释.鉴于word中可以去除空行(用^p^p替换^p),先用网上的代码,以后有时间写个完整 ...

  2. 然爸读书笔记(2014-10)----Bootsrap用户手册

    本来其实这方面的知识,可以直接在网站上看,但是自己是web前端的小白.基本不懂.所以,还是买一本书来看,更好些.体现出我对前端的重视. Bootstrap是快速开发Web应用程序的前端工具包.它是一个 ...

  3. CentOS安装crontab及使用方法

    crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于 “crontab”文件中,以供之后读取和执行.通常,crontab储 ...

  4. kill 进程卡住,超时kill方法

    还是有漏洞 ,万一 working.py未超时, kill_job.sh 会不会杀死别人的进程啊start.sh#!/bin/bash python working.py &python wo ...

  5. 扫盲Linq知识

    LINQ,语言集成查询(Language Integrated Query),是在.NET Framework 3.5 中出现的技术. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形 ...

  6. MySQL exist

    http://www.cnblogs.com/glory-jzx/archive/2012/07/19/2599215.html http://www.w3school.com.cn/sql/func ...

  7. 【疯狂Java学习笔记】【第一章:Java语言概述】

    [学习笔记]1.Java与C#的异同:Java与C#的相同之处有很多,它们均摒弃了C++面向对象的多继承.宏定义.全局变量.全局函数.指针等等难以使用的机制,添加进了成熟的机制,如垃圾回收.接口等等. ...

  8. TPS和QPS的区别

    一.TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数.TPS包括一条消息入和一条消息出,加上一次用户数据库访问.(业务TPS = CAPS × ...

  9. Ubuntu中安装DiscuzX2

    http://blog.csdn.net/kevin_ysu/article/details/7452938 一.Apache的安装 Apache作为一个功能强大的Web程序,自然是架建Web服务器的 ...

  10. Android:安卓资源引用符号的含义

    @代表引用资源 @*代表引用系统的非public资源,如: @*android:color/white @[package:]type/name引用自定义资源,如: android:text=&quo ...