首页 > 解决方案 > 在多种产品风格之间拆分 C++ 文件

问题描述

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

flavor1 使用 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.

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

标签: androidandroid-studioandroid-ndkandroid-productflavors

解决方案


我认为您不能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.

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


推荐阅读