Gradle获取特定任务的当前风格

我正在尝试处理google-services.json和不同的风格。 文档说我们需要根文件夹中的文件。

我有一个任务,可以轻松地将文件从flavor文件夹复制到根文件夹:

task CopyToRoot(type: Copy) { def appModuleRootFolder = '.' def srcDir = 'src' def googleServicesJson = 'google-services.json' outputs.upToDateWhen { false } def flavorName = android.productFlavors.flavor1.name description = "Switches to $flavorName $googleServicesJson" delete "$appModuleRootFolder/$googleServicesJson" from "${srcDir}/$flavorName/" include "$googleServicesJson" into "$appModuleRootFolder" } 

然后,在afterEvaluate I force

 afterEvaluate { processFlavor1DebugGoogleServices.dependsOn CopyToRoot processFlavor1ReleaseGoogleServices.dependsOn CopyToRoot } 

这仅适用于1种风味(静态定义)。 如何为每种口味做到这一点? 我有4种口味。 如何获得正在编译的当前风味?

[ 更新1 ] – 也尝试过:

 task CopyToRoot(type: Copy) { def appModuleRootFolder = '.' def srcDir = 'src' def googleServicesJson = 'google-services.json' outputs.upToDateWhen { false } def flavorName = android.productFlavors.flavor1.name android.applicationVariants.all { variant -> def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName() println('flavorString: ' + flavorString) description = "Switches to $flavorString $googleServicesJson" delete "$appModuleRootFolder/$googleServicesJson" from "${srcDir}/$flavorString/" include "$googleServicesJson" into "$appModuleRootFolder" } } 

但这不会复制正确的文件。 有帮助吗?

一种方法是在每种风格中创建一个名为“google-services”的文件夹,其中包含调试版本和json文件的发行版本:

在此处输入图像描述

在gradle文件的buildTypes部分中,添加以下内容:

  applicationVariants.all { variant -> def buildTypeName = variant.buildType.name def flavorName = variant.productFlavors[0].name; def googleServicesJson = 'google-services.json' def originalPath = "src/$flavorName/google-services/$buildTypeName/$googleServicesJson" def destPath = "." copy { if (flavorName.equals(getCurrentFlavor()) && buildTypeName.equals(getCurrentBuildType())) { println originalPath from originalPath println destPath into destPath } } } 

当您切换构建变体时,它会自动在您的应用程序模块的根目录下复制正确的json文件。

添加两个调用的方法,以获取build.gradle根目录下的当前flavor和当前构建types

 def getCurrentFlavor() { Gradle gradle = getGradle() String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() Pattern pattern; if( tskReqStr.contains( "assemble" ) ) pattern = Pattern.compile("assemble(\\w+)(Release|Debug)") else pattern = Pattern.compile("generate(\\w+)(Release|Debug)") Matcher matcher = pattern.matcher( tskReqStr ) if( matcher.find() ) { println matcher.group(1).toLowerCase() return matcher.group(1).toLowerCase() } else { println "NO MATCH FOUND" return ""; } } def getCurrentBuildType() { Gradle gradle = getGradle() String tskReqStr = gradle.getStartParameter().getTaskRequests().toString() if (tskReqStr.contains("Release")) { println "getCurrentBuildType release" return "release" } else if (tskReqStr.contains("generateDebug")) { println "getCurrentBuildType debug" return "debug" } println "NO MATCH FOUND" return ""; } 

基于这个答案

我find了答案。 Google最终支持不同的google-services.json。 您只需将插件更新为com.google.gms:google-services:2.0.0即可。 没有必要将json文件复制到app文件夹,只需将google-services.json不同的文件放在build flavor目录中。