Android Flavors:如何为指定Flavor禁用CMake?
解决方案:为单个Flavor禁用CMake
你的问题根源在于全局配置了externalNativeBuild,这会让所有Product Flavor都触发CMake构建任务,哪怕Flavor1没有相关配置。要实现仅Flavor2启用CMake,需将CMake配置完全移到Flavor2内部,移除全局的externalNativeBuild块。
修改后的Gradle配置
flavorDimensions "machine" productFlavors { flavor1 { dimension "machine" // 无需任何NDK/CMake相关配置 } flavor2 { dimension "machine" ndk { abiFilters 'arm64-v8a' libs "log" // 修正原代码拼写错误:lbLibs → libs } externalNativeBuild { cmake { path file('src/flavor2/cpp/CMakeLists.txt') version '3.18.1' cppFlags '' } } } } // 移除全局的externalNativeBuild块,避免对所有Flavor生效
关键改动说明
- 移除全局
externalNativeBuild:原来的全局配置会强制所有变体执行CMake构建,即使Flavor1不需要,导致报错buildCMakeDebug[armeabi-v7a]。 - 将CMake配置内联到Flavor2:仅在Flavor2的配置块中定义
externalNativeBuild.cmake,确保只有该Flavor触发原生代码构建。 - 修正拼写错误:原代码中
lbLibs是笔误,应为libs,避免NDK配置报错。
验证效果
- 构建Flavor1时:不会出现任何CMake相关任务,APK包内无原生.so文件。
- 构建Flavor2时:正常执行CMake编译,生成对应ABI的原生库并打包进APK。
内容的提问来源于stack exchange,提问作者Ofir A.
相关产品推荐
相关产品推荐

