无法为参数找到方法cppFlags()arguments()

13 c++ android cmake android-ndk ndk-build

我正在尝试使用

std::function
Run Code Online (Sandbox Code Playgroud)

但是编译器会抛出错误

Error:(50, 10) error: no type named 'function' in namespace 'std'
Run Code Online (Sandbox Code Playgroud)

我试图修改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'
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不接受除以外的参数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.
Run Code Online (Sandbox Code Playgroud)

请帮助我使用

std::function
Run Code Online (Sandbox Code Playgroud)

UPDATE

感谢@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'
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*ohn 30

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

一个是在android顶级块下,它指定本机构建脚本,cmakendkBuild的路径(但不是两者).

另一个可用于从gradle指定本机构建的一些参数.此块通常是defaultConfig块的子代,但也可以显示为flavor(请参阅示例.

这些externalNativeBuild块也可以有 cmakendkBuild节点,但只有匹配路径设置的子节点(见上文)是相关的,另一个是静默忽略的.

底线,将您的块拆分为两个,并将每个块放在build.gradle层次结构中的正确位置.

  • 我不知道没有你的回答我会怎么做!有用 !!现在工作!! 我想知道在哪里可以找到你提供的信息?我已多次阅读所有官方文档!谢谢,谷歌 (4认同)
  • 非常宝贵的资料!!谢谢我现在会尝试解决问题,至少我现在可以设置标志。 (3认同)