Android 将动态功能模块限制为某些内置类型

Android 将动态功能模块限制为某些内置类型,android,gradle,build.gradle,dynamic-feature-module,Android,Gradle,Build.gradle,Dynamic Feature Module,我有一个应用程序有两种风格和6种构建类型。我正在开发一个动态功能模块,但我不希望它包含在发行包中。有没有一种方法可以使用BuildType实现这一点?我已经尝试在所需的构建类型中添加dynamicFeatures=[“mymodule”],但它仍然被添加到发布包中。我知道我可以在模块的清单中将其指定为按需,以防止它被添加到用户安装的APK中,但我更愿意将其一起排除在发布包之外。有办法做到这一点吗?以下是我所做的: 我创建了另一个名为dynamic\u features.gradle的gradle

我有一个应用程序有两种风格和6种构建类型。我正在开发一个动态功能模块,但我不希望它包含在发行包中。有没有一种方法可以使用BuildType实现这一点?我已经尝试在所需的构建类型中添加
dynamicFeatures=[“mymodule”]
,但它仍然被添加到发布包中。我知道我可以在模块的清单中将其指定为按需,以防止它被添加到用户安装的APK中,但我更愿意将其一起排除在发布包之外。有办法做到这一点吗?

以下是我所做的:

我创建了另一个名为
dynamic\u 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>"]
    }
}
if(hasProperty('is\u release\u build')){
安卓{
建筑类型{
调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
质量保证{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
释放{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
登台{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
每日调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
本地的{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
}
}
}否则{
安卓{
建筑类型{
调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
质量保证{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
释放{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
登台{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
每日调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
本地的{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
}
动态特性=[“:”]
}
}
然后,我将
-Pis\u release\u build
添加到我的构建脚本中:
/gradlew clean bundleaprelease-Pis\u release\u build

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

以下是我所做的:

我创建了另一个名为
dynamic\u 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>"]
    }
}
if(hasProperty('is\u release\u build')){
安卓{
建筑类型{
调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
质量保证{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
释放{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
登台{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
每日调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
本地的{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','false'
}
}
}
}否则{
安卓{
建筑类型{
调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
质量保证{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
释放{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
登台{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
每日调试{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
本地的{
buildConfigField'boolean','HAS\u DYNAMIC\u FEATURES','true'
}
}
动态特性=[“:”]
}
}
然后,我将
-Pis\u release\u build
添加到我的构建脚本中:
/gradlew clean bundleaprelease-Pis\u release\u build

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