如何为特定构建风格设置 cpp 文件夹
How to set cpp folder for a specific build flavor
我在将 cpp
文件夹和 CMakelist.txt
文件添加到 android studio 中的特定风格时遇到问题。
我正在开发三个具有独特数据库结构的独立应用程序,因此我尝试使用构建风格和其他相关设置将这三个应用程序作为一个应用程序。
对于前两个应用程序,它做得很好,但是对于最后一个应用程序,我遇到了一个问题,我不知道如何将 cpp
文件夹和 CMakelist.txt
文件添加到特定的使用 Gradle 的风味。正如您可能已经猜到的那样,最后一个应用程序是基于 NDK 的,使用 CMakelist.txt
文件并有一个与 JNI 一起工作的 activity。
android {
...
defaultConfig {
applicationId "com.example"
...
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
flavorDimensions 'program'
productFlavors {
first {
dimension = 'program'
applicationIdSuffix = '.first'
}
second {
dimension = 'program'
applicationIdSuffix = '.second'
}
third {
dimension = 'program'
applicationIdSuffix = '.third'
externalNativeBuild {
cmake {
relativeProjectPath "src/third/cpp/CMakeLists.txt"
version "3.10.2"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
ndk { abiFilters "arm64-v8a" }
}
debug {
ndk { abiFilters "arm64-v8a" }
}
}
}
}
我在 gradle 中使用 relativeProjectPath
方法,并希望 CMakelist.txt
链接到我的 cpp
文件夹,但没有任何反应。
我没试过。在我以前的项目中对我有用的是这个。
android {
...
flavorDimensions "program"
productFlavors {
...
third {
dimension "program"
externalNativeBuild.cmake {
arguments "-DFLAVOR=THIRD_PROGRAM"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
...
}
然后在你的 CMakeList.txt
中做这个条件测试
if(${FLAVOR} STREQUAL "THIRD_PROGRAM")
// build your cpp codes for flavor THIRD
else()
// nothing to build?
endif()
请注意,我的 CMakeList.txt
在 app/
目录中。
我在将 cpp
文件夹和 CMakelist.txt
文件添加到 android studio 中的特定风格时遇到问题。
我正在开发三个具有独特数据库结构的独立应用程序,因此我尝试使用构建风格和其他相关设置将这三个应用程序作为一个应用程序。
对于前两个应用程序,它做得很好,但是对于最后一个应用程序,我遇到了一个问题,我不知道如何将 cpp
文件夹和 CMakelist.txt
文件添加到特定的使用 Gradle 的风味。正如您可能已经猜到的那样,最后一个应用程序是基于 NDK 的,使用 CMakelist.txt
文件并有一个与 JNI 一起工作的 activity。
android {
...
defaultConfig {
applicationId "com.example"
...
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
flavorDimensions 'program'
productFlavors {
first {
dimension = 'program'
applicationIdSuffix = '.first'
}
second {
dimension = 'program'
applicationIdSuffix = '.second'
}
third {
dimension = 'program'
applicationIdSuffix = '.third'
externalNativeBuild {
cmake {
relativeProjectPath "src/third/cpp/CMakeLists.txt"
version "3.10.2"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
ndk { abiFilters "arm64-v8a" }
}
debug {
ndk { abiFilters "arm64-v8a" }
}
}
}
}
我在 gradle 中使用 relativeProjectPath
方法,并希望 CMakelist.txt
链接到我的 cpp
文件夹,但没有任何反应。
我没试过。在我以前的项目中对我有用的是这个。
android {
...
flavorDimensions "program"
productFlavors {
...
third {
dimension "program"
externalNativeBuild.cmake {
arguments "-DFLAVOR=THIRD_PROGRAM"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
...
}
然后在你的 CMakeList.txt
中做这个条件测试
if(${FLAVOR} STREQUAL "THIRD_PROGRAM")
// build your cpp codes for flavor THIRD
else()
// nothing to build?
endif()
请注意,我的 CMakeList.txt
在 app/
目录中。