【转】js怎么编译成JSC

本文来自:http://www.welefen.com/js-to-jsc-on-cocos2d-html5-jsb-mode.html ,经笔者亲自在项目中试验,在cocos2dx 2.1.4下面,成功加密运行,所以记录一笔,这个问题也困扰了笔者大半天的时间,希望可以帮助一部分开发者。

cocos2d-html5是一个用JS来开发游戏的框架,通过javascript Binding的方式可以将游戏编译到手机上。这对前端开发人员来说非常方便,开发效率也比使用c++开发要快的多。

jsb模式下是通过打包spidermonkey来运行JS代码的。由于JS是一个解释型的语言,所以是把js当作assets直接拷贝进去的。带来的问题就是将apk包解压后就可以直接拿到js的源代码。

幸好官方出了一个cocos2d-console的工具,通过该工具可以将js编译为字节码。该工具在官方发布包的tools目录下。

那如何在发布的时候自动调用该工具,将js编译为jsc呢?

android

由于android下先要执行pro.android/build_native.sh脚本,所以我们可以在脚本里加入自动编译的功能,代码如下:


1

2

3

4

5

6

7

#定义console的目录

COCOS2D_CONSOLE=$COCOS2DX_ROOT/tools/cocos2d-console/console/

python
$COCOS2D_CONSOLE/cocos2d.py jscompile -s assets/script/  -d assets/script/;

cd
assets/script;

#删除js源文件

find
. -type f -name
"*.js"

| xargs rm -rf;

cd
../../;

以上代码要放在调用NDK编译之前。

ios

由于ios下编译没有对应的build_native.sh脚本,所以就没法使用类似的方式了。幸好xcode下编译时可以添加自定义的run script

选择 项目 -> TARGETS -> Build Phases -> Add Build Phases -> Add Run Script,添加如下的内容:


1

2

3

4

5

6

7

8

9

source
~/.bash_profile

CONSOLE_PATH=$COCOS2DX_ROOT"/tools/cocos2d-console/console/";

TARGET_DIR=$BUILT_PRODUCTS_DIR"/"$PRODUCT_NAME".app/";

JS_DIR=$TARGET_DIR"/script/";

/usr/bin/python
$CONSOLE_PATH/cocos2d.py jscompile -s $JS_DIR  -d $JS_DIR;

find
$JS_DIR -type f -name
"*.js"

| xargs rm -rf;

这样在编译时就会自动调用该脚本。(需要在.bash_profile里定义cocos2dx的根目录,并且变量名为COCOS2DX_ROOT)

将js编译为字节码发布,就不用担心别人可以拿到js源代码了。

注:笔者在项目中按照此配置在cocos2dx 2.1.4的版本中添加, 发现程序并不能按照实际的进行, 由于2.1.4的版本是先查找js文件再查找jsc文件,所以一直会再某一个地方崩溃(如果单独测试main.js文件,则一切正常), 具体原因,由于笔者能力有限,未能追查出来; 在这里,笔者提供一个解决方案, 就是修改cocos2dx 的源码, 使其先查找jsc文件,再查找js文件,则程序就能正常运行, 至此笔者的项目正常运行, 得以发布.

时间: 2024-10-10 04:34:14

【转】js怎么编译成JSC的相关文章

如何把js文件编译成dll供页面调用

1. 在解决方案中添加一个项目:JSControl 2. 在这个项目添加一个js文件(JScript1.js) 脚本的内容: function showAlert(){ alert('Today is a good dary'); } 3. 改变JScript1.js的属性,Build Action为Embedded Resource(嵌入的资源) 4. 在JSControl项目的AssemblyInfo.cs文件中添加一行:(注意JSControl.JScript1.js,JSControl是

Cocos2D-html5 公布游戏js编译为jsc

搞了老半天.这么回事啊.工具都在tools中. jsb模式下是通过打包spidermonkey来执行JS代码的. JS文件都在assets目录中.我们都知道assets目录.打包后的结果,将apk包解压后就能够直接拿到script的源代码. 官方工具cocos2d-console,该工具能够将script编译为字节码. 该工具在官方公布包的tools文件夹下. 在公布的时候自己主动调用该工具,将js编译为jsc例如以下: Android 在脚本pro.android/build_native.s

Handlebars.js 预编译(转)

Handlebars.js 官网上对预编译1是这样说的: 你需要安装 Node.js 你需要在全局环境中,通过 Npm 安装 handlebars 包 然后你就可以通过命令预编译你的 handlebars 模板文件: $ handlebars <input> --output <output> 假设我有一个模板文件,名称为 person.handlebars,内容很简单,如下: <table> <tr> <td>This is {{firstna

将NodeJS项目打包,编译成跨平台的可执行文件

引言 我们都知道nodejs的项目本身是没办法编译成二进制可执行文件的,这给我们很多的业务场景造成了一些问题,比如要给客户演示程序的时候,可能还得安装node环境,然后在安装一堆的依赖包,这还必须是网络环境较好的情况下,而有时候,一般企业如果安全看的特别重,限制在局域网内访问互联网,那么连包都没办法安装,显然对于你和对于客户都是不友好的情景. 还有一种情况:如果我们演示项目时,把代码交给对方部署,我们自己也不放心啊:Nodejs代码是明文JS代码,代码泄露怎么办?当然,防代码泄露可以用JSham

cocos2d-x v3.0的window平台搭建和编译成andriod程序

首先添加这个地址到系统环境变量,path 然后打开CMD,输入如下语句 现在就可以创建一个新项目了 这样一个空的cocos2d-x v3.0的项目就创建好了 接下来编译andriod程序 先在系统环境变量中添加一个NDK_ROOT 然后打开cmd 然后就开始编译了 接下来打开ADT中的eclipse 再添加andriod文件夹到工程里 cocos2d-x v3.0的window平台搭建和编译成andriod程序,布布扣,bubuko.com

C代码编译成可执行程序的过程

C代码通过编译器编译成可执行代码,经历了四个阶段,依次为:预处理.编译.汇编.链接. 接下来详细讲解各个阶段 一.预处理 1.任务:进行宏定义展开.头文件展开.条件编译,不检查语法. 2.命令:gcc -E [源文件]  -o [预处理文件] 3.案例:用gcc编译器预处理demo1.c代码,预处理后的文本放到demo1.i中.(gcc -E demo1.c -o demo1.i) demo1.c代码如下: 1 #include <stdio.h> 2 3 #define add(a, b)

转载:将STM32的标准库编译成lib使用【图文】

from:http://www.cnblogs.com/zyqgold/p/3189719.html 百度上边也有不少关于lib文件的文章,恰巧看到该博文,感觉该博文的条理清晰,步骤明确,故复制到这个博文中收藏,若文章作者看到且觉得不能装载,麻烦请告知,谢谢. 验证状态: 博主没有验证该博文. 将STM32的标准库编译成lib使用[图文] 以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程. 这个编译过程是一个相当慢的过程!完全编译大约需要一支烟的时间

关于.Net中Process的使用方法和各种用途汇总(二):用Process启动cmd.exe完成将cs编译成dll

上一章博客我为大家介绍了Process类的所有基本使用方法,这一章博客我来为大家做一个小扩展,来熟悉一下Process类的实际使用,废话不多说我们开始演示. 先看看我们的软件要设计成的布局吧. 首先我们需要给定会使用到的dll,记得vs中的引用那一项吗?我们虽然不需要将这里面的引用全部导入进来,但是我们需要将我们使用过的dll全部导入进来,不然编译时会提示找不到类方法之类的. 可能有些同学不知道怎么查看一个类或者方法所在的dll,其实只用对着那个方法或者类按下f12就能在打开的文档的正上方看到所

如何将源码文件编译成字节码文件

[[email protected] ~]# cat 1.py # 要编译的源码文件 #!/usr/bin/python print 'Hello World' [[email protected] ~]# cat 2.py # 将 1.py 编译成字节代码 #!/usr/bin/python import py_compile py_compile.compile('1.py') [[email protected] ~]# python 2.py [[email protected] ~]#