AndroidStudio task顺序有问题

Executing tasks: [:GameApp:assembleDebug]

Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:GameApp:buildInfoDebugLoader
***************************************
:GameApp:copyNativeLibs
***************************************
:GameApp:preBuild UP-TO-DATE
:GameApp:preDebugBuild UP-TO-DATE
:GameApp:checkDebugManifest
:libcocos2dx:preBuild UP-TO-DATE
:libcocos2dx:preReleaseBuild UP-TO-DATE
:libcocos2dx:checkReleaseManifest
:libcocos2dx:prepareReleaseDependencies
:libcocos2dx:compileReleaseAidl UP-TO-DATE
:libcocos2dx:compileReleaseNdk UP-TO-DATE
:libcocos2dx:compileLint UP-TO-DATE
:libcocos2dx:copyReleaseLint UP-TO-DATE
:libcocos2dx:mergeReleaseShaders UP-TO-DATE
:libcocos2dx:compileReleaseShaders UP-TO-DATE
:libcocos2dx:generateReleaseAssets UP-TO-DATE
:libcocos2dx:mergeReleaseAssets UP-TO-DATE
:libcocos2dx:mergeReleaseProguardFiles UP-TO-DATE
:libcocos2dx:packageReleaseRenderscript UP-TO-DATE
:libcocos2dx:compileReleaseRenderscript UP-TO-DATE
:libcocos2dx:generateReleaseResValues UP-TO-DATE
:libcocos2dx:generateReleaseResources UP-TO-DATE
:libcocos2dx:packageReleaseResources UP-TO-DATE
:libcocos2dx:processReleaseManifest UP-TO-DATE
:libcocos2dx:generateReleaseBuildConfig UP-TO-DATE
:libcocos2dx:processReleaseResources UP-TO-DATE
:libcocos2dx:generateReleaseSources UP-TO-DATE
:libcocos2dx:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE
:libcocos2dx:javaPreCompileRelease
:libcocos2dx:compileReleaseJavaWithJavac UP-TO-DATE
:libcocos2dx:processReleaseJavaRes UP-TO-DATE
:libcocos2dx:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
:libcocos2dx:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE
:libcocos2dx:mergeReleaseJniLibFolders UP-TO-DATE
:libcocos2dx:transformNativeLibsWithMergeJniLibsForRelease UP-TO-DATE
:libcocos2dx:transformNativeLibsWithStripDebugSymbolForRelease UP-TO-DATE
:libcocos2dx:transformNativeLibsWithSyncJniLibsForRelease UP-TO-DATE
:libcocos2dx:bundleRelease UP-TO-DATE
:GameApp:prepareDebugDependencies
:GameApp:compileDebugAidl UP-TO-DATE
:GameApp:compileDebugRenderscript
:GameApp:generateDebugBuildConfig UP-TO-DATE
:GameApp:generateDebugResValues UP-TO-DATE
:GameApp:generateDebugResources
:GameApp:mergeDebugResources UP-TO-DATE
:GameApp:processDebugManifest
:GameApp:processDebugResources
:GameApp:generateDebugSources
:GameApp:incrementalDebugJavaCompilationSafeguard UP-TO-DATE
:GameApp:javaPreCompileDebug
:GameApp:compileDebugJavaWithJavac UP-TO-DATE
:GameApp:mergeDebugShaders UP-TO-DATE
:GameApp:compileDebugShaders UP-TO-DATE
:GameApp:generateDebugAssets UP-TO-DATE
:GameApp:mergeDebugAssets
:GameApp:processDebugJavaRes UP-TO-DATE
:GameApp:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
:GameApp:packageInstantRunResourcesDebug
:GameApp:fastDeployDebugExtractor UP-TO-DATE
:GameApp:generateDebugInstantRunAppInfo UP-TO-DATE
:GameApp:checkManifestChangesDebug
:GameApp:transformClassesWithExtractJarsForDebug UP-TO-DATE
:GameApp:transformClassesWithInstantRunVerifierForDebug UP-TO-DATE
:GameApp:transformClassesWithDependencyCheckerForDebug UP-TO-DATE
:GameApp:generateJsonModelDebug UP-TO-DATE
:GameApp:externalNativeBuildDebug
***************************************
Build cocos2djs armeabi
[armeabi] Compile++ arm  : cocos2djs_shared <= SDKManager.cpp
[armeabi] SharedLibrary  : libcocos2djs.so
***************************************
:GameApp:mergeDebugJniLibFolders
:GameApp:transformNativeLibsWithMergeJniLibsForDebug
:GameApp:transformNativeLibsAndResourcesWithJavaResourcesVerifierForDebug
:GameApp:transformClassesWithInstantRunForDebug UP-TO-DATE
:GameApp:transformClassesEnhancedWithInstantReloadDexForDebug UP-TO-DATE
:GameApp:incrementalDebugTasks UP-TO-DATE
:GameApp:preColdswapDebug
:GameApp:transformClassesWithInstantRunSlicerForDebug UP-TO-DATE
:GameApp:transformClassesWithDexForDebug UP-TO-DATE
:GameApp:validateSigningDebug
:GameApp:transformDexWithInstantRunDependenciesApkForDebug UP-TO-DATE
:GameApp:transformDexWithInstantRunSlicesApkForDebug UP-TO-DATE
:GameApp:transformNativeLibsWithStripDebugSymbolForDebug
:GameApp:packageDebug
:GameApp:buildInfoGeneratorDebug
:GameApp:compileDebugSources
:GameApp:assembleDebug

BUILD SUCCESSFUL

Total time: 29.684 secs

仔细看log发现copyNativeLibs执行在native build之前,这导致每次改C++代码后的第一次 Run ‘GameApp’ 时修改并没有生效~~~

添加task的第二个参数指定上一个task依赖

你按照这个 pr 修改下看看?

https://github.com/cocos-creator/cocos2d-x-lite/pull/758/files

您试过吗?
我用这个fix,sync的时候不报错,但是build的时候会报如下错

Could not get unknown property 'externalNativeBuildRelease' for project

完整的build.gradle,如下:

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.1"

    defaultConfig {
        applicationId "com.lol.taishi"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"

        externalNativeBuild {
            ndkBuild {
                if (!rootProject.ext.hasProperty("NDK_MODE") || rootProject.ext.NDK_MODE.compareTo('none') != 0) {
                    // skip the NDK Build step if PROP_NDK_MODE is none
                    targets 'cocos2djs'
                    arguments 'NDK_TOOLCHAIN_VERSION=4.9'
                    arguments 'APP_PLATFORM=android-22'
                    
                    def module_paths = [project.file("../../../cocos2d-x"),
                                        project.file("../../../cocos2d-x/cocos"),
                                        project.file("../../../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 'NDK_OUT=./obj'
                    
                    arguments '-j' + Runtime.runtime.availableProcessors()
                    abiFilters.addAll(rootProject.ext.APP_ABI.split(':').collect{it as String})
                }
            }
        }
    }

    sourceSets.main {
        java.srcDir "src"
        res.srcDir "res"
        jniLibs.srcDir "libs"
        manifest.srcFile "AndroidManifest.xml"
    }

    externalNativeBuild {
        ndkBuild {
            if (!rootProject.ext.hasProperty("NDK_MODE") || rootProject.ext.NDK_MODE.compareTo('none') != 0) {
                // skip the NDK Build step if PROP_NDK_MODE is none
                path "jni/Android.mk"
            }
        }
    }

    signingConfigs {

        release {
            storeFile file('../game.jks')
            storePassword 'abcdefg'
            keyAlias 'hahaha'
            keyPassword 'abcdefg'
        }

        debug {
            storeFile file('../game.jks')
            storePassword 'abcdefg'
            keyAlias 'hahaha'
            keyPassword 'abcdefg'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release

            externalNativeBuild {
                ndkBuild {
                    arguments 'NDK_DEBUG=0'
                }
            }
        }

        debug {
            signingConfig signingConfigs.debug
            externalNativeBuild {
                ndkBuild {
                    arguments 'NDK_DEBUG=1'
                }
            }
        }
    }

    dexOptions {
        preDexLibraries true
        javaMaxHeapSize "2g"
//        incremental true
        dexInProcess = true
    }
}

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

    variant.mergeAssets.doLast {
        copy {
           from "${buildDir}/../../../../../res"
           into "${buildDir}/intermediates/assets/${variant.dirName}/res"
        }

        copy {
            from "${buildDir}/../../../../../src"
            into "${buildDir}/intermediates/assets/${variant.dirName}/src"
        }

        copy {
            from "${buildDir}/../../../../../main.js"
            from "${buildDir}/../../../../../project.json"
            into "${buildDir}/intermediates/assets/${variant.dirName}"
        }

        copy {
            from "../../../cocos2d-x/cocos/scripting/js-bindings/script"
            into "${buildDir}/intermediates/assets/${variant.dirName}/script"
        }
    }
}

// task copyNativeLibs(type: Copy) {  
//     from('./obj/local') {
//         include '**/*.so'
//         exclude '**/objs*'
//     into './libs'
// }
// tasks.withType(JavaCompile) {
//     compileTask -> compileTask.dependsOn copyNativeLibs
// }

afterEvaluate {
    externalNativeBuildDebug.doLast {
        println ('Copying debug .so')
        copy {
            from('./obj/local') {
                include '**/*.so'
                exclude '**/objs*'
            }
            into './libs'
        }
    }
    externalNativeBuildRelease.doLast {
        println ('Copying release .so')
        copy {
            from('./obj/local') {
                include '**/*.so'
                exclude '**/objs*'
            }
            into './libs'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':libcocos2dx')
}

在debug mode下,可以用 ‘externalNativeBuildDebug’,但不能用’externalNativeBuildRelease’;
但在release mode(android studio中Build Variants中每一个都设置成release)下,两者皆可用
原因不明

试过啊,我这都没问题的
你把 gradle 升级下看看 ?
https://github.com/cocos2d/cocos2d-x/commit/fd74e4d6aad9ec60aeb7ce3b5f1903676f6355b3