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

喜夏-厌秋 提交于 2019-12-01 14:54:01

问题


I am trying to use

std::function

But the compiler throws an error

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

I have tried to modify the build.gradle file

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

But it doesn't accept arguments other than path and throws the following errors

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.

Please help me to be able to use

std::function

UPDATE

Thanks to @Alex Cohn I was able to configure flags and arguments, and now my file looks like that

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'
}

回答1:


There are two entirely different blocks in build.gradle that are named externalNativeBuild (thanks, Google).

One is under android top-level block, and it specifies the path to native build script, cmake or ndkBuild (but not both).

The 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 example).

These externalNativeBuild blocks can also have cmake or ndkBuild children, but only the child that matches the path setting (see above) is relevant, the other is silently ignored.

The bottom line, split your block in two, and put each one in correct place in build.gradle hierarchy.



来源:https://stackoverflow.com/questions/47370186/could-not-find-method-cppflags-arguments-for-arguments

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!