You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android项目中排除特定资源限定符(land)的资源打包?

解决方案

由于你需要针对不同产品风味(flavor)控制是否包含values-land资源,全局排除会影响依赖该资源的风味,因此推荐按风味单独配置:

方案1:针对特定风味重新指定资源目录

在模块级build.gradle(或build.gradle.kts)中,为不需要values-land资源的风味单独指定资源路径,仅保留默认values目录:

android {
    flavorDimensions "version" // 按你的项目定义风味维度
    productFlavors {
        noLandFlavor {
            // 仅包含主资源目录和默认values,自动排除values-land
            res.srcDirs = [
                "src/main/res",
                "src/main/res/values"
            ]
        }
        needLandFlavor {
            // 保留默认资源配置,自动包含所有res子目录
        }
    }
}

方案2:为特定风味添加资源过滤

通过风味对应的sourceSet配置,直接排除values-land路径下的所有资源:

android {
    productFlavors {
        noLandFlavor {
            sourceSets.noLandFlavor.res.filter.exclude { file ->
                file.path.contains("values-land")
            }
        }
        needLandFlavor {
            // 无需额外配置,保留原资源结构
        }
    }
}

为什么之前的配置未生效?

  • sourceSets.main.res.filter.exclude是全局配置,会作用于所有风味,与你"部分风味保留资源"的需求冲突。
  • packagingOptions主要用于控制APK打包阶段的文件(如JNI库、第三方jar包),而资源是在合并阶段处理的,因此用它排除资源目录不会生效。

验证配置是否生效

执行以下命令查看对应风味的资源合并日志,确认values-land资源是否被排除:

./gradlew :app:processNoLandFlavorDebugResources --info

在日志中搜索values-land,若无对应资源合并记录,说明配置生效。

内容的提问来源于stack exchange,提问作者Vit Khudenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:45:53