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顶级块下,它指定本机构建脚本,cmake或ndkBuild的路径(但不是两者).
另一个可用于从gradle指定本机构建的一些参数.此块通常是defaultConfig块的子代,但也可以显示为flavor(请参阅示例.
这些externalNativeBuild块也可以有 cmake或ndkBuild子节点,但只有匹配路径设置的子节点(见上文)是相关的,另一个是静默忽略的.
底线,将您的块拆分为两个,并将每个块放在build.gradle层次结构中的正确位置.