zoukankan      html  css  js  c++  java
  • 【转】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文件,则程序就能正常运行, 至此笔者的项目正常运行, 得以发布.

  • 相关阅读:
    ABAP-创建客户
    Windows 10 上的 Git 如何清除密码? Git Credential Manager for Windows
    FastAdmin 是如何利用 Git 管理插件代码的?
    关于 ThinkPHP5 使用 getBy 字段名方式获取数据
    如何开始一个电子硬件项目?(思维导图)
    随笔:关于 FastAdmin ueditor 插件 中的 rand mt_rand mt_getrandmax 问题
    Chrome 的应用功能越来越强大
    FastAdmin Bootstrap-Table 关于客户端模式(由 计算所有页的的总数引发的思考)
    随笔教程:FastAdmin 如何打开新的标签页
    odoo 数据库选择的随笔
  • 原文地址:https://www.cnblogs.com/qvbrgw/p/4506823.html
Copyright © 2011-2022 走看看