将动态功能模块限制为某些 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
是可选的,但如果您想检查该功能在运行时是否可用,则很有用。
我的应用有两种风格和 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
是可选的,但如果您想检查该功能在运行时是否可用,则很有用。