如何在Android build.gradle中为特定构建类型动态设置packagingOptions
问题描述
希望为特定构建类型(release)设置packagingOptions的useLegacyPackaging以减小APK体积,但尝试两种配置均未达到预期:
- 在
buildTypes的release节点下配置packagingOptions,结果该选项作用于所有构建类型,所有APK体积都同等减小:
android { packagingOptions { pickFirst '**/*.so' } buildTypes { debug { // 相关配置 } staging { // 相关配置 } release { // 相关配置 packagingOptions { jniLibs { useLegacyPackaging true } } } } }
- 使用
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
相关产品推荐
相关产品推荐

