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源代码了。

cocos2d-html5的jsb模式下如何在编译时自动将js编译为jsc的更多相关文章

  1. c语言: 错误:只允许在 C99 模式下使用‘for’循环初始化声明 用gcc编译出现

    在gcc编译中如果使用 for(int i=0;i<n;++i){}会提示错误 错误:只允许在 C99 模式下使用'for'循环初始化声明 用gcc编译出现 就是说你的你的c编译器不是c99标准 ...

  2. Dalvik模式下基于Android运行时类加载的函数dexFindClass脱壳

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78003184 前段时间在看雪论坛发现了<发现一个安卓万能脱壳方法>这篇 ...

  3. KindEditor设置为过滤模式,但在代码模式下提交表单时不过虑HTML标签的解决方法

    KindEditor设置filterMode为true,但在代码模式下提交表单的话,发现并没有过虑掉自己不想保留的HTML标签. 这时只需同步内容前加上红色部分内容即可: onClick=" ...

  4. Mycat主从模式下的读写分离与自动切换

    1. 机器环境 192.168.2.136 mycat1 192.168.2.134 mydb1 192.168.2.135 mydb2 2在mysql1.mysql2上安装mysql 更改root用 ...

  5. 关于 Javascript 严格模式下多文件合并时注意

    Javascript 在第一行使用 "use strict" 声明严格模式. 但是在多个 js 文件合并时就需要注意了,可能你的是严格模式,但别的文件不是,就会造成错误. 为什么使 ...

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

    搞了老半天.这么回事啊.工具都在tools中. jsb模式下是通过打包spidermonkey来执行JS代码的. JS文件都在assets目录中.我们都知道assets目录.打包后的结果,将apk包解 ...

  7. SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题

    数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...

  8. 交互模式下测试python代码及变量的四则运算

    在交互模式下,python代码可以立即执行,所以这很方便我们进行代码测试 1.命令窗口,输入python (如果没配置环境变量则需带python安装目录的绝对路径) >>> 这个就是 ...

  9. IntelliJ IDEA在Local模式下Spark程序消除日志中INFO输出

    在使用Intellij IDEA,local模式下运行Spark程序时,会在Run窗口打印出很多INFO信息,辅助信息太多可能会将有用的信息掩盖掉.如下所示 要解决这个问题,主要是要正确设置好log4 ...

随机推荐

  1. C++异常处理assert,throw,exit用法

    常见的几个小细节问题. assert应用: 在现实世界中,我们脑袋时刻都在判断对与错,对的事情我们会继续深入下去,而错的事情我们会马上停止,那么在编程开发中我们如何赋予程序这种判断事物对错的能力呢?其 ...

  2. SpringMVC + Spring + MyBatis 学习笔记:在类和方法上都使用RequestMapping如何访问

    系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 先看代码: @Requ ...

  3. JavaEE5 Tutorial_Jsp,EL

      Jsp的各种元素在转化为servlet时处理是不一样的:指令,控制web容器如何处理页面脚本,被插入到生成的servlet里EL表达式,作为参数传递到解析器get/set Property,变成方 ...

  4. 【转】Hive导入10G数据的测试

    原博文出自于: http://blog.fens.me/hadoop-hive-10g/ 感谢! Hive导入10G数据的测试 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让H ...

  5. 转】MyEclipse使用总结——设置MyEclipse使用的Tomcat服务器

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/3935499.html 感谢! 一.设置使用的Tomcat服务器 如果不想使用MyEclipse自带的tomcat ...

  6. 深刻理解Python中的元类metaclass(转)

    本文由 伯乐在线 - bigship 翻译 英文出处:stackoverflow 译文:http://blog.jobbole.com/21351/ 译注:这是一篇在Stack overflow上很热 ...

  7. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (0/1-Trie树)

    Vasiliy's Multiset 题目链接: http://codeforces.com/contest/706/problem/D Description Author has gone out ...

  8. PCB板简易流程

    PCB布线规则设置 在进行布线之前一般要进行布线规则的设置,(因为元器件的封装已经画出了元件实际的轮廓大小,所以放置元件封装时,即使两个元件封装挨着也一般不会影响元件的实际安装,不过一般还是稍留一点距 ...

  9. ODBC 是什么

    In computing, ODBC (Open Database Connectivity) is a standard programming language middleware API fo ...

  10. junit4学习(Annotation)

    在一个测试类中,所有被@Test注解修饰的public,void方法都是testcase,可以被JUNIT执行. @Retention(value=RUNTIME) @Target(value=MET ...