能否仅为Android应用的单个flavor配置classpath与应用指定插件?
问题解答
你提出的两项需求均可以实现,具体实现方案如下:
插件仅对promoVersion风味生效(应用级build.gradle配置)
不要在应用级build.gradle的顶部直接声明应用该插件,改为在配置末尾动态判断风味后加载即可,代码示例(Groovy语法):
// 原有应用级配置保留,在文件末尾添加如下代码 afterEvaluate { productFlavors.each { flavor -> if (flavor.name == "promoVersion") { // 动态应用google-services插件 apply plugin: 'com.google.gms.google-services' } } }
如果你使用的是Gradle插件DSL写法(plugins块声明插件),可以先声明插件但不立即应用,再执行上面的动态加载逻辑:
plugins { id 'com.android.application' // 声明插件版本,但不立即应用 id 'com.google.gms.google-services' version '4.3.8' apply false }
使用该写法的情况下,无需再在项目级build.gradle的buildscript中声明对应classpath。
项目级buildscript classpath的配置说明
buildscript中声明的classpath属于Gradle构建脚本本身的依赖,不会打包进入最终的应用安装包,就算全局声明也不会对publicVersion的包体积、功能产生任何影响,因此推荐直接全局保留该classpath配置即可,额外开销可以忽略不计。
如果确实不想全局声明,可以直接使用上述插件DSL的写法,完全不需要在项目级buildscript中添加该classpath,也能满足需求。
额外注意事项
你可以将google-services.json文件放置在app/src/promoVersion/目录下,这样只有构建promoVersion风味时才会读取该配置文件,publicVersion构建时不会触发相关逻辑。
内容的提问来源于stack exchange,提问作者user15603244
相关产品推荐
相关产品推荐

