Android Cocos Creator游戏开发平台打包优化实现方案

 更新时间:2022年11月14日 15:50:58   作者:devnn  
Cocos Creator是一款轻量、高效、免费开源的跨平台游戏引擎,同时也是实时3D内容创作平台,不仅支持2D、3D的游戏开发,同时在HMI、IoT、XR、虚拟人偶等领域,均可提供一套完善的行业解决方案

初次接触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。

到此这篇关于Android Cocos Creator游戏开发平台打包优化实现方案的文章就介绍到这了,更多相关Android Cocos Creator内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Android自定义view实现左滑删除的RecyclerView详解

    Android自定义view实现左滑删除的RecyclerView详解

    RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法
    2022-11-11
  • 实例详解Android文件存储数据方式

    实例详解Android文件存储数据方式

    总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。下面通过本文给大家介绍Android文件存储数据方式,对android文件存储数据相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • android通过拼音搜索中文的功能实现代码

    android通过拼音搜索中文的功能实现代码

    这篇文章主要介绍了android通过拼音搜索中文的功能实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Kotlin中的反射机制深入讲解

    Kotlin中的反射机制深入讲解

    反射,简单来说,是一种在运行时动态地访问对象属性和方法的方式,而不需要事先确定这些属性是什么。下面这篇文章主要给大家介绍了关于Kotlin中反射机制的相关资料,需要的朋友可以参考下
    2018-11-11
  • Android下Activity间通信序列化过程中的深浅拷贝浅析

    Android下Activity间通信序列化过程中的深浅拷贝浅析

    这篇文章主要给大家介绍了关于Android下Activity间通信序列化过程中深浅拷贝的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • Android编程实现改变控件背景及形态的方法

    Android编程实现改变控件背景及形态的方法

    这篇文章主要介绍了Android编程实现改变控件背景及形态的方法,涉及Android控件布局设置的相关技巧,需要的朋友可以参考下
    2016-02-02
  • Android性能优化死锁监控知识点详解

    Android性能优化死锁监控知识点详解

    这篇文章主要为大家介绍了Android性能优化死锁监控知识点详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • init output stream初始化输出流源码分析

    init output stream初始化输出流源码分析

    这篇文章主要为大家介绍了init output stream初始化输出流源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Android自定义橡皮擦效果

    Android自定义橡皮擦效果

    这篇文章主要为大家详细介绍了Android自定义橡皮擦效果,橡皮擦擦图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android利用AudioRecord类实现音频录制程序

    Android利用AudioRecord类实现音频录制程序

    这篇文章主要为大家详细介绍了Android利用AudioRecord类实现音频录制程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04

最新评论