4

我在 android studio 中将文件cpp夹和CMakelist.txt文件添加到特定风格时遇到问题。

我正在开发三个具有独特数据库结构的独立应用程序,因此我尝试使用构建风格和其他相关设置将这三个应用程序作为一个应用程序。

对于前两个应用程序,它做得很好,但对于最后一个应用程序,我遇到了一个问题,我不知道如何使用 Gradle 将cpp文件夹和CMakelist.txt文件添加到特定风格。您可能已经猜到了,最后一个应用程序是基于 NDK 的,它使用一个CMakelist.txt文件,并且有一个与 JNI 一起使用的活动。


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

relativeProjectPath在 gradle 中使用一种方法,并期望CMakelist.txt与我的cpp文件夹链接,但没有任何反应。

4

1 回答 1

4

我没有这样尝试过。在我以前的项目中对我有用的是这个。

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/目录中。

于 2019-09-05T08:35:47.007 回答