将动态功能模块限制为某些 BuiltTypes

Restrict dynamic feature module to certain BuiltTypes

我的应用有两种风格和 6 种构建类型。我正在开发一个动态功能模块,但我不希望它包含在发布包中。有没有办法使用 buildTypes 来做到这一点?我已经尝试在所需的 buildTypes 中添加 dynamicFeatures = ["mymodule"],但它仍然被添加到发布包中。我知道我可以在模块的清单中将它指定为 on-demand 以防止它被添加到用户安装的 apk 中,但我更愿意将它一起放在发布包之外。有办法吗?

这是我所做的:

我创建了另一个名为 dynamic_features.gradle 的 gradle 文件。这是它的样子:

if (hasProperty('is_release_build')) {
    android {
        buildTypes {
            debug {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'false'
            }
            qa {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'false'
            }
            release {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'false'
            }
            staging {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'false'
            }
            debugDaily {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'false'
            }
            local {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'false'
            }
        }
    }
} else {
    android {
        buildTypes {
            debug {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'true'
            }
            qa {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'true'
            }
            release {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'true'
            }
            staging {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'true'
            }
            debugDaily {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'true'
            }
            local {
                buildConfigField 'boolean', 'HAS_DYNAMIC_FEATURES', 'true'
            }
        }

        dynamicFeatures = [":<features>"]
    }
}

然后,我将 -Pis_release_build 添加到我的构建脚本中:./gradlew clean bundleAppRelease -Pis_release_build

最后,我将 apply from: 'dynamic_features.gradle' 添加到我的应用级别 build.gradle。使用构建脚本生成的包不包含功能模块。 buildConfigField 是可选的,但如果您想检查该功能在运行时是否可用,则很有用。