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

如何在Android build.gradle中为特定构建类型动态设置packagingOptions

问题描述

希望为特定构建类型(release)设置packagingOptions的useLegacyPackaging以减小APK体积,但尝试两种配置均未达到预期:

  1. 在buildTypes的release节点下配置packagingOptions,结果该选项作用于所有构建类型,所有APK体积都同等减小:
android {
  packagingOptions {
    pickFirst '**/*.so'
  }

  buildTypes {
    debug {
      // 相关配置
    }
    staging {
      // 相关配置
    }
    release {
      // 相关配置
      packagingOptions {
        jniLibs {
          useLegacyPackaging true
        }
      }
    }
  }
}
  1. 使用androidComponents配置时,抛出构建错误Cannot set readonly property: useLegacyPackaging:
android {
  // 其他配置
}

androidComponents {
  onVariants(selector().withBuildType("release")) {
    packaging.jniLibs.useLegacyPackaging = true
  }
}
解决方案

使用androidComponents API时,需通过mutablePackaging来修改打包配置(packaging对象为只读,无法直接修改),针对release构建类型的正确配置如下:

android {
  // 全局配置及其他构建类型配置
  packagingOptions {
    pickFirst '**/*.so'
  }

  buildTypes {
    debug {
      // 相关配置
    }
    staging {
      // 相关配置
    }
    release {
      // 相关配置
    }
  }
}

androidComponents {
  onVariants(selector().withBuildType("release")) { variant ->
    variant.mutablePackaging.jniLibs.useLegacyPackaging = true
  }
}

说明

  • mutablePackaging是Variant API中用于修改打包配置的可写对象,直接访问packaging得到的是只读的配置快照,这也是之前报错的核心原因。
  • 该配置仅对release构建类型生效,debug和staging构建将保持原有打包逻辑,不会启用useLegacyPackaging。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:30:07