在多个产品风格之间拆分 C++ 文件

Splitting c++ files between multiple product flavours

我的 Android Studio 模块有两种产品风格:

flavour1 使用 NDK 并包含 cpp 文件,而 flavor2 不使用 NDK 并且不应包含 cpp 文件。(当某些 cpp 文件仅与 flavour1 一起使用时会发生同样的问题,其他 cpp 文件特定于 flavour2).

我将所有 cpp 文件放在 flavour1/cpp 中并希望它能完成工作。但是,适用于 Java 的方法似乎不适用于 cpp,因为 cmake 总是接受位于 CMAKE_HOME_DIRECTORY 指定目录中的文件,即 main/cpp 和没有其他的!任何其他 cpp 文件位置都会产生错误消息:

Failed to activate protocol version: "CMAKE_HOME_DIRECTORY" is set but incompatible with configured source directory value.

我能想到的唯一解决方法是为每种产品口味设置不同的库。有没有更自然的方法?

我认为您不能根据构建风格完全禁用 externalNativeBuild。你可以做的是根据构建风格向 CMake 传递一个参数,只是不要构建任何你想从中排除本机库的风格的库:

flavor1 {
    externalNativeBuild {
        cmake {
            arguments "-DENABLE_NATIVE_LIBS=TRUE"
        }
    }
}

flavor2 {
    externalNativeBuild {
        cmake {
            arguments "-DENABLE_NATIVE_LIBS=FALSE"
        }
    }
}

然后在你的 CMakeLists.txt:

cmake_minimum_required(VERSION whatever you support)

if (NOT ENABLE_NATIVE_LIBS)
    return()
endif()

# Rest of your CMakeLists.txt here.

我还没有测试过,但应该可以。