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

如何仅为单个productFlavor配置androidResources.noCompress

单Product Flavor配置noCompress不生效问题解决

问题复现

目标是仅为outerRing产品风味配置不压缩.so文件,初始配置如下:

flavorDimensions "ring"
productFlavors {
    innerRing {
        dimension "ring"
    }
    outerRing {
        dimension "ring"
        androidResources {
            noCompress 'so'
        }
    }
}

构建后发现innerRing、outerRing两个风味的.so文件均未被压缩,该现象由Gradle静态配置所有productFlavor的机制导致。

后续尝试在afterEvaluate阶段定向修改目标变体的noCompress配置,代码如下:

afterEvaluate {
    android.applicationVariants.all { variant ->
        def ring = variant.getProductFlavors().get(0).name
        if (ring == "outerRing") {
            println("Don't compress .so files for outer ring build")
            android.androidResources.noCompress = ['so']
        }
    }
}

构建抛出如下错误:

com.android.build.gradle.internal.dsl.AgpDslLockedException: 
It is too late to modify internalNoCompressList
It has already been read to configure this project.
Consider either moving this call to be during evaluation,
or using the variant API.

错误原因是internalNoCompressList在afterEvaluate阶段已经被读取用于项目配置,此时修改全局配置时机过晚,需要通过Variant API在变体配置阶段完成定向设置。

正确实现方案(基于Variant API)

AGP 7.0及以上版本可通过androidComponents扩展块提供的Variant API实现单变体配置,无需修改全局参数,代码如下:

androidComponents {
    // 按风味维度精准筛选outerRing对应的变体
    onVariants(selector().withFlavor("ring", "outerRing")) { variant ->
        // 仅给当前筛选出的变体添加so不压缩规则
        variant.androidResources.noCompress.add("so")
    }
}

注意:该配置方案仅适用于Android Gradle Plugin 7.0及以上版本,低版本AGP无对应Variant API支持,需要先升级AGP版本再使用。

配置说明

  • 禁止在productFlavors块内直接配置androidResources.noCompress,该块内的androidResources配置属于全局域,会被所有变体继承,导致非目标风味也生效
  • 禁止在afterEvaluate阶段修改全局android.androidResources配置,该时机配置已被锁定,必然触发修改过晚的错误
  • selector().withFlavor("维度名", "风味名")可以按风味维度精准筛选目标变体,如果是多维度组合的风味也可以叠加筛选条件,比直接匹配变体名更稳定
  • 直接操作变体自身的androidResources属性,配置仅对当前变体生效,不会影响其他风味的打包逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:06:47