Nun*_* D. 8 android gradle google-play-services android-productflavors
我正在尝试处理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和当前构建类型
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 "";
}
基于这个答案
| 归档时间: | 
 | 
| 查看次数: | 9127 次 | 
| 最近记录: |