找不到参数的方法 cppFlags() arguments()

Could not find method cppFlags() arguments() for arguments

我正在尝试使用

std::function

但是编译器报错

Error:(50, 10) error: no type named 'function' in namespace 'std'

我已经尝试修改 build.gradle 文件

externalNativeBuild {
    ndkBuild {
        path "src/main/jni/Android.mk"
    }
    cmake {
        cppFlags "-std=c++11"
        arguments "-DANDROID_STL=gnustl_static"
        path 'src/main/jni/CMakeLists.txt'
    }
}

但它不接受 path 以外的参数并抛出以下错误

Error:(28, 0) Could not find method arguments() for arguments [-DANDROID_STL=gnustl_static] on object of type com.android.build.gradle.internal.dsl.CmakeOptions.

请帮助我使用

std::function

更新

感谢 @Alex Cohn 我能够配置标志和参数,现在我的文件看起来像这样

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                arguments "-DANDROID_STL=gnustl_static"
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        /*   ndkBuild {
               path "src/main/jni/Android.mk"
           }*/
        cmake {
            // cppFlags "-std=c++11"
            //arguments "-DANDROID_STL=gnustl_static"
            path 'src/main/jni/CMakeLists.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-annotations:25.0.1'
}

build.gradle 中有两个完全不同的块,名为 externalNativeBuild(感谢,Google) .

Oneandroid top-level 块下,它指定了本地构建脚本的路径,cmake ndkBuild(但不是两者)。

other can be used to specify, from gradle, some parameters for the native build. This block is usually a child of the defaultConfig block, but can also appear for flavors (see an ).

这些externalNativeBuild块也可以有cmakendkBuildchildren , 但只有匹配 path 设置(见上文)的 child 是相关的,其他的被忽略。

最重要的是,将您的块一分为二,并将每个块放在 build.gradle 层次结构中的正确位置。