Android Gradle似乎在添加产品风格时过度编写了ndk构建参数
我有一个android项目,其中build.gradle如下所示:Android Gradle似乎在添加产品风格时过度编写了ndk构建参数,android,gradle,android-ndk,android-gradle-plugin,Android,Gradle,Android Ndk,Android Gradle Plugin,我有一个android项目,其中build.gradle如下所示: android { compileSdkVersion 25 buildToolsVersion "25.0.0" defaultConfig { applicationId "com.example.test" minSdkVersion 24 targetSdkVersion 25 versionCode 1 versionName "1.0" ndk { //
android {
compileSdkVersion 25
buildToolsVersion "25.0.0"
defaultConfig {
applicationId "com.example.test"
minSdkVersion 24
targetSdkVersion 25
versionCode 1
versionName "1.0"
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your APK.
abiFilters 'armeabi-v7a'
}
externalNativeBuild {
ndkBuild {
targets "test_app"
}
}
}
buildTypes {
release {
minifyEnabled false
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
general {
externalNativeBuild {
ndkBuild {
arguments "LOCAL_CFLAGS+=-std=c++11"
arguments "LOCAL_CFLAGS+=-DMODE_GENERAL"
}
}
}
full {
externalNativeBuild {
ndkBuild {
arguments "LOCAL_CFLAGS+=-std=c++11"
arguments "LOCAL_CFLAGS+=-DMODE_FULL"
}
}
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/cpp/Android.mk'
}
}
}
我在
路径'src/main/cpp/Android.mk'
中的Android.mk已经包含LOCAL\u CFLAGS+=-std=c++11
,如果我没有任何产品风格,它构建得很好。但是,如果我确实有产品风格,那么我必须包含参数“LOCAL\u CFLAGS+=-std=c++11”
来构建它。我想知道是否有任何方法可以避免这种情况,因为我觉得我应该只需要包括在Android.mk
中没有提到的额外参数。问题行为的根本原因不是渐变,而是在make的命令行上设置LOCAL\u CFLAGS
(make变量)。gnu make的规则在ndk build的框架下运行,它声明这个“锁定”变量,在makefile中设置的任何内容都无效。Make引入了一个特殊的,但不能在ndk构建中用于本地\u CFLAGS
您不应该从本地模块外部覆盖本地\u CFLAGS
;您应该在Application.mk中使用APP\u CFLAGS
,或者作为ndk build命令行参数使用
< > >设置<代码>(无论什么),不允许使用cFLAGS=-STD= C++ 11 < /COD>,因为这些标志将被传递给C++和C编译器。此设置属于LOCAL\u CPPFLAGS
及其亲属
使用gradle插件,您可以使用cFlags和cppFlags,如-优于通用参数所示,例如:
gradle插件确实覆盖了NDK构建的许多设置,这就是为什么引入了cFlags、abiFilter和最后的参数。感谢您的解释。我试试这个。
productFlavors {
full {
externalNativeBuild {
ndkBuild {
cFlags "-DMODE_FULL"
cppFlags "-fexceptions"
}
}
}
}