如何为特定构建风格设置 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.txtapp/ 目录中。