如何在使用GCM 3.0的Android应用中保留不同的配置?

11

我希望为我的调试/发布版本保留不同的配置,但是显然,google-services.json文件只允许一个。有没有其他选择?是否有办法保留多个文件?


1
请查看此链接 https://dev59.com/Uozda4cB1Zd3GeqPqsf5#31895658 - ahmed_khan_89
2个回答

18

我正在使用这种解决方法来解决与构建版本相关的类似问题。

特定于版本的google-service.json文件存储在/app/src/{flavour-name}/google-service.json下。要将其复制到/app目录中,可以将以下代码添加到/app/build.gradle文件中:

    gradle.taskGraph.beforeTask { Task task ->
        if(task.name ==~ /process.*GoogleServices/) {
            android.applicationVariants.all { variant ->
                if(task.name ==~ /(?i)process${variant.name}GoogleServices/){ 
                    copy {
                        from "/src/${variant.flavorName}"
                        into '.'
                        include 'google-services.json'
                    }
                }
            }
        }
    }

在没有添加任何依赖库的情况下(根据我理解你的问题),以下的/app/build.gradle代码片段可以在安卓工作室测试项目中发挥作用:

结果翻译为:

在没有口味的情况下(就我理解的问题而言),以下的/app/build.gradle代码片段可在一个Android Studio测试项目中完成任务:

    gradle.taskGraph.beforeTask { Task task ->
        if(task.name ==~ /process.*GoogleServices/) {
            android.applicationVariants.all { variant ->
                if(task.name ==~ /(?i)process${variant.name}GoogleServices/){
                    copy {
                        from '.'
                        into '.'
                        rename { String fileName ->
                            fileName.replace("google-services-${variant.name}.json", 'google-services.json')
                        }
                        include "google-services-${variant.name}.json"
                    }
                }
            }
        }
    }
该代码片段期望在你的 /app 目录下有一个 google-services-debug.json 和一个 google-services-release.json 文件,并将其复制并重命名为 google-services.json。
希望这可以帮到你。

1
这将每次运行所有变体。对吧?我没有尝试过,但尝试过类似的东西。 - ahmed_khan_89
1
我需要在 from "src/${variant.flavorName}" 中删除第一个 /,但除此之外,@MartinS你的解决方案真是太棒了。 - Richard Poole
1
应该使用"src/${variant.flavorName}"而不是"/src/${variant.flavorName}"。请确认。 - DàChún
我可以确认第一个“/”必须被删除。对于我而言,在Gradle 1.3.1和Play服务插件1.3.1下它能够正常工作,但当两者都更新到1.5.0时,会显示以下错误:File google-services.json is missing from module root folder. The Google Services Plugin cannot function without it - Ereza
@AndroidGecko 是的,如果您删除第一个斜杠,它就可以工作:from "/src/${variant.flavorName}" 变成 from "src/${variant.flavorName}" - Ereza
我们需要为每个变体在Firebase中添加不同的项目才能获取google-services.json文件吗? - Rohan Lodhi

0

目前还没有办法定义特定构建配置。不过这是个好主意,看起来很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接