Android flavors - 为特定的 flavor 禁用 CMAKE

问题描述 投票:0回答:2

我的 Android 应用程序有两种运行类型,一种包含与 C++ 库的集成,另一种不包含。

我想创造两种口味来支持:

  • Flavor1 没有 NDK 支持。这种风格需要在没有任何本机代码支持的情况下运行,因此本机文件不需要成为 APK 的一部分。
  • Flavor2 支持NDK,有cmake路径和版本。

是否可以仅针对一种口味禁用 Cmake?

当我尝试运行 flavor 1(无 NDK)时,出现错误(:app:buildCMakeDebug[armeabi-v7a]),似乎仍然需要 cmake。

下面你可以看到我的 Gradle 文件中的相关行。

flavorDimensions "machine"
productFlavors {
    flavor1 {
        dimension "machine"
    }
    flavor2 {
        dimension "machine"
    ndk {
        abiFilters 'arm64-v8a'
        lbLibs "log"
    }
    externalNativeBuild.cmake {
        cppFlags ''
        }
    }
}
externalNativeBuild {
    cmake {
        path file('src/flavor2/cpp/CMakeLists.txt')
        version '3.18.1'
    }
}
android cmake android-ndk android-productflavors
2个回答
0
投票

理论上你可以做类似的事情,而不是在其他风格中包含 NDK

flavorDimensions "machine"
productFlavors {
    flavor1 {
        dimension "machine"
    }
    flavor2 {
        dimension "machine"
    ndk {
        abiFilters 'arm64-v8a'
        lbLibs "log"
    }
    
    externalNativeBuild {
        cmake {
            path file('src/flavor2/cpp/CMakeLists.txt')
            version '3.18.1'
            cppFlags ''
        }
      }
    }
}

检查文档中的Specify optional configurations


0
投票

我认为要针对特定的 Android 风格禁用 CMAKE,您可以在应用程序的 build.gradle 文件中使用 externalNativeBuild 块。在此块中,您可以为每种风格定义构建配置并指定要使用的构建系统。

这是一个示例,说明如何为特定口味禁用 CMAKE:

android {
    flavorDimensions "machine"
    productFlavors {
        flavor1 {
            dimension "machine"
            externalNativeBuild {
                cmake {
                    // disable CMAKE for this flavor
                    enabled false
                }
            }
        }
        flavor2 {
            dimension "machine"
            externalNativeBuild {
                cmake {
                    // enable CMAKE for this flavor
                    enabled true
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.