gpt4 book ai didi

android - Gradle 似乎在添加产品 flavor 时覆盖了 ndk 构建参数

转载 作者:行者123 更新时间:2023-11-29 16:57:55 24 4
gpt4 key购买 nike

我有一个 build.gradle 看起来像这样的 android 项目:

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

我在 path 'src/main/cpp/Android.mk' 中的 Android.mk 已经包含 LOCAL_CFLAGS += -std=c++11 并且构建良好如果我没有任何产品口味。但是,如果我确实有产品风格,那么我必须包含 arguments "LOCAL_CFLAGS+=-std=c++11" 才能构建它。我想知道是否有任何方法可以避免这种情况,因为我觉得我应该只需要包含 Android.mk 中未提及的额外参数。

最佳答案

问题行为的根本原因不是 gradle,而是您在 make 的命令行上设置了 LOCAL_CFLAGS(一个 make 变量)。在 ndk-build 的引擎盖下运行的 gnu make 的规则声明这“锁定”了变量,并且您在 makefile 中设置的任何内容都无效。 Make 介绍了一个特殊的override directive , 但它不能在 LOCAL_CFLAGS 的 ndk-build 中使用。

您不应该从本地模块外部覆盖 LOCAL_CFLAGS;您应该在 Application.mk 中使用 APP_CFLAGS 或作为 ndk-build 命令行参数。

设置 (whatever)_CFLAGS=-std=c++11 不是一个好主意,因为这些标志将同时传递给 C++ 和 C 编译器。此设置属于 LOCAL_CPPFLAGS 和她的亲属。

通过gradle插件,可以使用cFlagscppFlags,如official doc所示- 优于通用参数例如:

productFlavors {
full {
externalNativeBuild {
ndkBuild {
cFlags "-DMODE_FULL"
cppFlags "-fexceptions"
}
}
}
}

关于android - Gradle 似乎在添加产品 flavor 时覆盖了 ndk 构建参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44169071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com