Android Cocos Creator游戏开发平台打包优化实现方案
devnn 人气:0初次接触Cocos Creator小游戏开发,发现构建Android平台的工程后,进行打包,编译效率很慢,基本需要10~20分钟的时间不等,电脑也轰隆隆的响,cpu和内存处于满负载工作。新创建cocos creator工程也不复杂呀,为啥打包这么慢呢?
想起之前也接触过cocos2dx c++工程,打包也是奇慢。结合cocos2dx引擎以及gradle工程配置,初步估计是ndk编译cocos2dx引擎这一步是导致编译慢的渊源。
卡点分析
打包过程存在的卡点主要是cocos2dx基础库的编译过程慢,它需要使用ndk全量编译c++代码,代码较庞大,因此占用资源高。然而游戏开发中无需对cocos2dx基础库做修改,每次编译产物so文件可以复用。可以将ndk编译产物so文件作为gradle打包的依赖。根据这个思路,可以省略cocos2dx的编译,复用编译产物,提升游戏apk打包效率。
优化步骤
一、进行一次全量编译,提取cocos2dx编译产物
先将cocos creator工程导出android studio工程(as工程)。
在as工程中配置需要编译的目标平台库:
找到工程根目录下的gradle.properties
文件,修改PROP_APP_ABI
属性,一般配置成
PROP_APP_ABI=arm64-v8a:x86_64
编译后即可生成arm64-v8a和x86_64平台的cocos2dx目标so库,分别满足真机和PC模拟器运行。
运行gradle命令开始一次全量编译出包:./gradlew assembleRelease
编译完成后,在app/build/intermediates/merged_native_libs
下找到cocos2dx的编译产物:
将以上红框两个文件夹复制出来,拷贝到app/libs目录下:
二、修改gradle配置,去掉cocos2dx库的编译
在app工程的build.gradle文件中,将上一步中libs目录配置成jni库的依赖。
具体操作:在android{}中sourceSets.main元素中添加如下配置jniLibs.srcDirs “libs”。示例:
sourceSets.main {
java.srcDirs "../src", "src"
res.srcDirs "../res", 'res'
jniLibs.srcDirs "../libs", 'libs'
manifest.srcFile "AndroidManifest.xml"
assets {
srcDirs 'assets', 'src/main/assets'
}
}
接下来在app工程build.gradle
文件中将externalNativeBuild{...}
代码块注释:
android{
defaultConfig {
//将以下代码块注释
externalNativeBuild {
ndkBuild {
if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
// skip the NDK Build step if PROP_NDK_MODE is none
targets 'cocos2djs'
arguments 'NDK_TOOLCHAIN_VERSION=clang'
def module_paths = [project.file("/Applications/CocosCreator/Creator/2.4.5/CocosCreator.app/Contents/Resources/cocos2d-x"), project.file("/Applications/CocosCreator/Creator/2.4.5/CocosCreator.app/Contents/Resources/cocos2d-x/cocos"), project.file("/Applications/CocosCreator/Creator/2.4.5/CocosCreator.app/Contents/Resources/cocos2d-x/external")]
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
}
else {
arguments 'NDK_MODULE_PATH=' + module_paths.join(':')
}arguments '-j' + Runtime.runtime.availableProcessors()
abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String})
}
}
}
}
}
或者在工程根目录gradle.properties文件中增加以下配置,设置跳过NDK编译步骤:
PROP_NDK_MODE=none
到此为止,已经省略了耗时的cocos2dx库的编译。
优化效果
经过以上优化后,打包时间基本控制在30秒左右,与之前的10-20分钟相比,效率提升十分明显。电脑也没有轰隆隆的响了。修改cocos creator工程代码后,再次打包,修改也生效了,这也充分说明cocos2dx的编译是多余的。
小知识:cocos2d引擎本来是objective-c语言开发的,因为被苹果收购作为iphone平台小游戏的专用引擎也被苹果带火了。后来国内出了cocos2d c++版本的引擎且可以跨平台交叉编译,可以在linux、windows、mac等系统上运行,所以叫作cocos2dx。在cocos creator上编译出来的引擎库文件名是libcocos2djs.so。
加载全部内容