How to convert "js" to "jsc" for code security --(Tutorial by YUYE)

Cocos2d-x html5/ javascript binding is a very popular engine for developer to develop game quickly and convenient.

But the published javascript game is nearly naked for everybody can see it. the good way is to do Obfuscated code.

Cocos2d-x engine already had some tools to make your javascript code safe. so today let me show you How to convert
“js” to “jsc” for code security .

Firstly , we go to see some documents for jsc security‘s introduct:
You can always find the latest command for converting “js” to “jsc” in the documents under this path “/Users/UserName/cocos2d-x-2.2.2Test/tools/cocos2d-console/console/README.md”.

As the document “README.md” said:

# Will generate bytecode files
$ cocos2d jscompile -d output_dir -s cocos2dx_root/scripting/javascript/bindings/js -s cocos2dx_root/samples/Javascript/Shared/tests -o game.min.js -j compiler_config_sample.json -c

wow! it’s scared。
Do not worried! I attend to tell you what happened in this command step by step.

h1.Step1:
I made a simple javascript “Hello World” Game called “MyGame”. in 2.2.**V
if you do not know how to create a game. please read the tutorial “How to create a”Hello World" C++ project with cocos2d-x2.2.2 or 3.0"
http://www.cocos2d-x.org/forums/6/topics/43031
and if want to create a 2.2.**V javascript game just using

python create_project.py -project MyGame -package com.MyCompany.AwesomeGame -language javascript

If you are using stable version 3.*

python create_project.py -p GameName -k Test -t org.cocos2dx.gameName -l javascript

Step2:

We can find a “.json” format file under this path: “/Users/UserName/cocos2d-x-2.2.2/tools/cocos2d-console/console/bin/compiler_config_sample.json”

“compiler_config_sample.json” can help us to add/skip any javascript’s files. in this case we just need to modify this file like:

And copy it to this path:“/Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources”

Step3:
Under this path:

       cd /Users/UserName/cocos2d-x-2.2.2Test/tools/cocos2d-console/console

We can find the “cocos2d.py” script. Here is a tools for convert “js” to “jsc” for code security by python . (you can find many tools in the tools folder).
So if you had already prepared running python environment. you can just perform it like this way:

python cocos2d.py funtionName -argumentName1 (argument) ...

Now you can perform this command like this :
python cocos2d.py jscompile ~~d /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/~~s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/ s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/srco game.cocos2d.js j /Users/UserName/cocos2d-x-2.2.2Test/projects/MyGame/Resources/compiler_config_sample.jsonc

Then you can remove the all files under the path :“/Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/src”,and run your “Hello world game”. if it performed ok. congratulation! you did a great job for your code security.

h1.Now we can see what happan what happened in below’s command step by step.
In the command “$ python cocos2d.py jscompile …”we have 6 arguments.

  • “~~d output_dir"*
    In this argument required the output direction for converted file.
    i.e:
    <pre>
    ~~d /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/
    </pre>
    **“~~s cocos2dx_root/scripting/javascript/bindings/js”*
    In this argument required the output direction for converted file.
    i.e:
    <pre>
    ~~s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/
    </pre>
    If you javascript code under many folders. then you can declare like this way
    i.e:
    <pre>
    ~~s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/~~s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/src
    </pre>
    **(3)”~~o game.min.js“*
    In this argument required the converted file’s name.
    **"~~j compiler_config_sample.json"*
    In this argument required the direction of compiler_config_sample.json.
    i.e:
    <pre>
    ~~j /Users/UserName/cocos2d-x-2.2.2Test/projects/MyGame/Resources/compiler_config_sample.json
    </pre>
    **(5)”~~c“*
    In this argument required nothing.
    if you added”~~c" it means to compress all js files into just a big file
    i.e:
    <pre>
    ~~j /Users/UserName/cocos2d-x-2.2.2Test/projects/MyGame/Resources/compiler_config_sample.json
    </pre>

If you don not want to compress all js files into just a big file. you can input the command like this way:

python cocos2d.py jscompile -d /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/ -s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/ -s /Users/UserName/cocos2d-x-2.2.2/projects/MyGame/Resources/src 

Just ignore the j xxxo xxx ~~c

h1. In the end:
You can using command
<pre>
python cocos2d.py jscompile —help
</pre>

<pre>
Usage: cocos2d.py jscompile~~s src_dir ~~d dst_dir
Options:
~~h, —help show this help message and exit
~~s SRC_DIR_ARR, —src=SRC_DIR_ARR
source directory of js files needed to be compiled,
supports mutiple source directory
~~d DST_DIR, —dst=DST_DIR
destination directory of js bytecode files to be
stored
~~c, —use_closure_compiler
Whether to use closure compiler to compress all js
files into just a big file
~~o COMPRESSED_FILENAME, —output_compressed_filename=COMPRESSED_FILENAME
Only available when ’~~c’ option was True
~~j COMPILER_CONFIG, —compiler_config=COMPILER_CONFIG
The configuration for closure compiler by using JSON,
please refer to compiler_config_sample.json

Hey, buddy, all images are dead links…
But it’s great to have some tutorials!