编辑器优化建议: 原生编译打包失败问题解决方案

  • Creator 版本:2.4.4

  • 目标平台: Android

  • 重现方式:
    原生平台打包, 经常会遇到编译失败问题:
    build/jsb-link/frameworks/runtime-src/proj.android-studio/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/cocos2dx_static/scripting/js-bindings/jswrapper/v8/debugger/inspector_socket_server.o.d: No such file or directory
    经查,出现此问题的根本原因是因为windows 系统下,文件路径最长只能达到255个字符, 而cc引擎编辑出来的build文件路径太长, 导致编译工具截断了文件路径,从而出现无法找到文件异常.

  • 此问题对于android 小白来说, 可能要浪费三五天时间还是无从下手解决,白白浪费大家时间.

期望引擎组能够从根本上解决这一问题, 解决方案也比较简单, 就是修改buildDir 指定为一个较短的临时目录即可. 相应的需要修改各模块里的相关目录. 具体修改方案如下:

  1. jsb-link/project-root/build.gradle
ext {
   //  增加项目全局变量, 定义cocos js构建目录
    assetRootDir = ""
}

allprojects {

    // 增加以下内容,重写buildDir.
    assetRootDir = "${new File(getRootDir(), "../../../").getAbsolutePath()}"
    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
        setBuildDir("D:/temp/${getRootProject().name}/${getProject().name}")
    } else {
        setBuildDir("/temp/${getRootProject().name}/${getProject().name}")
    }
}
  1. 修改各模块中的build.gradle

android.applicationVariants.all { variant ->
    // delete previous files first
    delete "${buildDir}/intermediates/merged_assets/"

    variant.mergeAssets.doLast {

        // 移除这一句, 改为:  def sourceDir = assetRootDir
        // def sourceDir = "${buildDir}/../../../../.."

        def sourceDir = assetRootDir

        copy {
            from "${sourceDir}/assets"
            into "${outputDir}/assets"
        }
    }
}

求引擎组直接修改引擎的编译模板内容, 直接做到一步到位.

2赞