你是否也会在编译原生app的时候,被那蜗牛般的进度条,呼呼作响的电脑风扇折磨得抓狂。每次修改代码进行真机调试的时候,编译时间慢,严重影响开发效率。如果你的机器是神一样的机器,编译速度毫无压力,那就另说!如果引入了第三方的原生sdk,编译起来速度可能会更慢。主要的原因是因为每次都要编译cocos2dx这个大家伙。一般情况下,这个编译出来的so库,是不会动的,除非你修改了cocos2dx源码。所以编译出来一次就可以重复利用,不需要每次都编译它。编译速度基本可以从几分钟缩减到几十秒内,根据每个人的电脑配置而定。原理就是这样,所以我们要先拿到编译好的库。
首先按照原来的步骤构建编译
勾选对应的平台,注意支持的平台越多,apk的包会越大。
按照原来的步骤构建编译
编译好之后去到工程的目录下的
build\jsb-link\frameworks\runtime-src\proj.android-studio\app\build\outputs\apk\debug
生成的apk包就是在这里。如果你生成的是release版的就在release那里。
下面我们把armeabi-v7a这个文件夹拷贝出来。以便后用。
然后我们删除掉项目里面的build目录。删除之后,点击构建,先不要点编译,然后去到安卓工程的根目录,在项目的
build\jsb-link\frameworks\runtime-src\proj.android-studio
把刚才拷贝出来的so库文件放在app目录中的lib文件夹里面。
然后用vsCode打开gradle.properties这个文件,增加PROP_NDK_MODE=none
然后我们去到app下的build.gradle打开来看看
这里了解一下工作原理即可,这个文件不需要修改。也可以直接注释这里,不让其运行也可以。就不需要设置PROP_NDK_MODE=none了,但是后面PROP_NDK_MODE=none要用到,所以还是直接设置这个属性来控制较为方便。
这样设置完成后,就可以点击编译了,你会发现十来秒就能编译成功了。
本质就是把提前编译好的库先提取出来,然后每次编译前手动放进去,然后再让其跳过NDK原生的编译。就是这么简单的原理。手动操作的方法就是这样。。。。。。。
但是,作为一个有追求的程序员,崇尚能用代码搞定的事情就尽量不手动,每次构建都要改文件再编译也是一件麻烦事。当然如果你构建一次,改了一次之后,每次都是只构建脚本,应该也不需要每次都改。
下面我们介绍怎么用扩展的方式实现自动化。首先你需要了解扩展的相关知识:
我们创建一个扩展
在packages里面创建一个名为fast-compile文件夹(名字随你喜欢),目录架构如下:
包含一个package.json描述文件和main.js入口文件。
先看描述文件:
另外我们需要把之前编译好的各平台的so库放进这里来,方便读取,如上面的armeabi-v7a
看main.js,这里要做的就是监听构建结束的事件,然后通过文件系统fs的相关api,以代码的方式拷贝文件和修改gradle.properties。
然后删掉build,重启Cocos Creator,点击构建,你会在Cocos Creator里面的控制台看到相应的提示。然后点击编译,火车般的进度条,露出满意的笑容…
注意,你构建的时候选了啥平台的就要把相应平台的库拷到扩展目录啊,然后在main.js里面list里面追加啊。不要那么懒照搬啊。。。。。。
另外要注意构建的时候勾选的如果是调试模式,就要用调试模式生成相关库,release模式就用release模式。理论上debug的库在release也能用,release的库在debug也能用,但是不同模式下,优化级别不同,把debug的库打包到release版本去就坑爹。安全起见,真正发布打包的时候,你可以删掉扩展,按照原步骤用蜗牛速度编译,毕竟辛苦了好几年,不在乎那几分钟,从千辛万苦中体验发包的快乐。。。。。
附件:扩展相关代码
fast-compile.zip (1.4 KB)